c类和对象练习题
北航1212考试题目批次《C++程序设计》习题题目练习-练习一-(附答案)
北航1212考试批次《C++程序设计》复习题一一、客观题单项选择题(本大题共20小题,每小题1.5分,共30分)1、在面向对象的程序设计中,一切都是围绕着___展开的(B)。
A.语言 B.类 C.数据类型 D.结构2、以下关于类和对象的叙述中,正确的是( D)。
A.类和对象间没有联系 B.一个类的成员函数可以任意被调用C.对象是抽象的,而类是具体实现D.一般只有通过具体的对象才能访问类的成员函数3、关于C++语言和C语言的关系的下列描述中,错误的是( D)。
A.C语言是C++语言的一个子集 B.C++语言对C语言做了些改进C.C++语言与C语言兼容 D.C语言和C++语言都是面向对象的语言4、下列函数中,可以为虚函数的是( D )。
A.自定义的构造函数 B.拷贝构造函数 C.静态成员函数D.析构函数5、在一个被调用函数中,关于return语句使用的描述,错误的是( C )。
A.被调用函数中可以不用return语句; B.被调用函数中可以使用多个return语句;C.被调用函数中,一个return语句可以返回多个值给调用函数;D.被调用函数中,如果有返回值,就一定要有return语句;6、若用数组名作为函数调用时的实参,则实际上传递给形参的是(A)A、数组首地址B、数组的第一个元素值C、数组中全部元素的值D、数组元素的个数7、在以下关于C++语言的注释的叙述中,不正确的是(C )A、C++程序中,注释可用“/*”、“*/”形式表示,也可用“//”形式表示B、C++编译器在编译一个程序时,将跳过注释,不对其进行处理C、C++编译器在编译一个程序时,可发现注释中的单词拼写错误D、程序中注释的多少不会影响所生成的可执行文件的长度8、下列关于C++函数的叙述中,正确的是(C)A、每个函数至少要具有一个参数B、每个函数都必须返回一个值C、函数在被调用之前必须先声明D、函数不能自己调用自己9、假定要对类AB定义加号操作符重载成员函数,实现两个AB类对象的加法,并返回相加结果,则该成员函数的声明语句为:(B)。
c++练习题(带答案)
一、选择题1.C++语言属于( C )。
A)自然语言 B)机器语言 C)面向对象语言D)汇编语言2.下面选项中不属于面向对象程序设计特征的是(C) 。
A)继承性 B)多态性 C)相似性 D)封装性3.可用作C++语言用户标识符的一组标识符是( B )。
A) void define +WORD B) a3_b3 _123 YNC) for -abc Case D) 2a DO sizeof4.假定一个二维数组的定义语句为“inta[3][4]={{3,4},{2,8,6}};”,则元素a[2][1]的值为(A)。
A) 0 B) 4 C) 8 D) 65.下列情况中,哪一种情况不会调用拷贝构造函数( B )?A)用派生类的对象去初始化基类对象时B)将类的一个对象赋值给该类的另一个对象时C)函数的形参是类的对象,调用函数进行形参和实参结合时D)函数的返回值是类的对象,函数执行返回调用者时6.以下哪一关键字可用于重载函数的区分(C)A)extern B)static C)const D)virtual7.下列有关数组的叙述中,正确的是( B )A)C++中数组的存储方式为列优先存储B)数组名可以作为实参赋值给指针类型的形参C)数组下标索引从1开始,至数组长度n结束D)数组指针的语法形式为:类型名 *数组名[下标表达式];8.下列有关继承和派生的叙述中,正确的是( C )A)派生类不能访问通过私有继承的基类的保护成员B)多继承的虚基类不能够实例化C)如果基类没有默认构造函数,派生类就应当声明带形参的构造函数D)基类的析构函数和虚函数都不能够被继承,需要在派生类中重新实现9.实现运行时多态的机制是( A )A)虚函数B)重载函数C)静态函数D)模版函数10.若有下面的函数调用:fun(a+b, 3, max(n-1, b));其中实参的个数是( A)A)3 B)4 C)5 D)611.下列关于this指针的说法正确的是( B)A)this指针存在于每个函数之中B)在类的非静态函数中this指针指向调用该函数的对象C)this指针是指向虚函数表的指针D)this指针是指向类的函数成员的指针12.在下列关于C++函数的叙述中,正确的是(C)A)每个函数至少要有一个参数B)每个函数都必须返回一个值C)函数在被调用之前必须先声明D)函数不能自己调用自己13.下列运算符中,不能重载的是(C)A)&& B)!= C). D)->14.下面程序的输出结果是(B)#include <iostream>using namespace std;int i = 0;int fun(int n){static int a = 2;a++;return a+n;}void main(){int k = 5;{int i = 2;k += fun(i);}k += fun(i);cout << k;}A)13 B)14 C)15 D)1615.下面的程序段的运行结果为(D)char str[] = "job", *p = str;cout << *(p+2) << endl;A)98 B)无输出结果 C)字符’b’的地址 D)字符’b’16.下面程序的输出结果是( C )#include <iostream>using namespace std;class A{public:A (int i) { x = i; }void dispa () { cout << x << “,”; }private :int x ;};class B : public A{public:B(int i) : A(i+10) { x = i; }void dispb() { dispa(); cout << x << endl; }private :int x ;};void main(){B b(2);b.dispb();}A)10,2 B)12,10 C)12,2 D)2,217.下面程序的输出结果是( C)?#include <iostream>using namespace std;class Base{public:Base(int i) { cout << i; }~Base () { }};class Base1: virtual public Base{public:Base1(int i, int j=0) : Base(j) { cout << i; }~Base1() {}};class Base2: virtual public Base{public:Base2(int i, int j=0) : Base(j) { cout << i; }~Base2() {}};class Derived : public Base2, public Base1{public:Derived(int a, int b, int c, int d) : mem1(a), mem2(b), Base1(c), Base2(d), Base(a){ cout << b; }private:Base2 mem2;Base1 mem1;};void main() { Derived objD (1, 2, 3, 4); }A)134122 B)123412 C)14302012 D)14321218.下面程序的输出结果是(C)#include <iostream>using namespace std;class Base{public:virtual void f() { cout << “f0+”; }void g() { cout << “g0+”; }};class Derived : public Base{public:void f() { cout << “f+”; }void g() { cout << “g+”; }};void main() { Derived d; Base *p = &d; p->f();p->g(); }A)f+g+ B)f0+g+ C)f+g0+ D)f0+g0+19.下面程序的输出结果是( C )#include <iostream>using namespace std;class Sample{friend long fun (Sample s){if (s.x < 2) return 1;return s.x * fun(Sample(s.x-1));}public:Sample (long a) { x = a; }private:long x;};void main(){int sum = 0;for (int i=0; i<4; i++){sum += fun(Sample(i));}cout << sum;}A)12 B)16 C)10 D)34 20.以下程序的输出结果是:(D)#include <iostream>using namespace std;int fun(char *s){ char *p=s;while (*p!='\0') p++;return (p-s);}void main(){cout<<fun("abc")<<endl;}A.0 B. 1 C. 2 D. 321.有如下程序段:int i=1;while(1){i++;if (i==10) break;if(i%2==0) cout<<’*’;}执行这个程序段输出字符*的个数是(C)A. 10B. 3C. 4D.522.下列关于虚基类的描述中,错误的是(C)A. 使用虚基类可以消除由多继承产生的二义性B. 构造派生类对象时,虚基类的构造函数只被调用一次C. 声明 class B:virtual public A 说明类B为虚基类D. 建立派生类对象时,首先调用虚基类的构造函数23.有下类定义Class A {Char *a;Public:A():a(0){}A(char *aa) {//把aa所指字符串拷贝到a所指向的存储空间A=___________________;Strcpy(a,aa);~A() {delete [] a;}};正确的选择是(A)A. new char[strlen(aa)+1]B. char[strlen(aa)+1]C. char[strlen(aa)]D. newchar[sizeof(aa)-1]24.假定AA为一个类,a为该类私有的数据成员,GetValue( )为该类公有函数成员,它返回a的值,x为该类的一个对象,则访问x对象中数据成员a的格式为(d )。
C++课后习题及其答案
练习题11.1 判断题×1.C++语言和C语言都是面向对象的程序设计语言。
√2.面向对象方法具有封装性、继承性和多态性。
√3.C语言是C++语言的一个子集。
C++语言继承了C语言。
×4.C++语言程序与C语言程序一样都是函数串。
×5.C++语言支持封装性和继承性,不支持多态性。
√6.C++语言比C语言对数据类型要求更加严格了。
√7.C++语言对C语言进行了一次改进,使得编程更加方便了。
×8.C++源程序在编译时可能出现错误信息,而在连接时不会出现错误信息。
√9.编译C++源程序时,出现了警告错(Warning)也可以生成可执行文件。
√10.C++语言程序的实现也要经过编辑、编译连接和运行3个步骤。
1.2 单选题1.下列关于面向对象概念的描述中,错误的是(C )。
A.面向对象方法比面向过程方法更加先进B.面向对象方法中使用了一些面向过程方法中没有的概念C.面向对象方法替代了结构化程序设计方法D.面向对象程序设计方法要使用面向对象的程序设计语言2.下列各种高级语言中,不是面向对象的程序设计语言是(D )。
A.C++ B.JavaC.VB D.C3.下列关于类的描述中,错误的是( A )。
A.类就是C语言中的结构类型B.类是创建对象的模板C.类是抽象数据类型的实现D.类是具有共同行为的若干对象的统一描述体4.下列关于对象的描述中,错误的是(C )。
A.对象是类的一个实例B.对象是属性和行为的封装体C.对象就是C语言中的结构变量D.对象是现实世界中客观存在的某种实体5.下列关于C++程序中使用提取符和插入符的输入/输出语句的描述中,错误的是(C )。
A.提取符是对右移运算符(>>)重载得到的B.插入符是对左移运算符(<<)重载得到的C.提取符和插入符都是双目运算符,它们要求有两个操作数D.提取符和插入符在输入/输出语句中不可以连用1.3 填空题1.C++语言具有面向对象方法中要求的三大特性:封装性、继承性和多态性。
c++类和对象练习题
精心整理第8章类与对象8.1知识要点1.掌握类与对象的概念和定义方法,掌握类成员的访问属性。
2.掌握构造函数的概念、定义方法和使用方法。
分析:对象是类的一个实例,类与对象的关系和数据与变量的关系相似,所以一个类可以有多个对象。
例题2:下面()项是对构造函数和析构函数的正确定义。
A.void X::X(), void X::~X()B.X::X(参数),X::~X()C.X::X(参数),X::~X(参数)D.void X::X(参数),void X::~X(参数)答案:B分析构造函数无返回类型、可带参数、可重载;析构函数无返回类型、不可带参数、}; }C. class P{ D. class P{intf; public:?}; int a;?f=25; void Seta (int x) {a=x;}答案:D分析:在类体内不可对数据成员进行初始化;类定义结束时需用分号;只有类中的成员函数才能存取类中的私有数据。
例题5:拷贝构造函数具有的下列特点中,()是错误的。
A.如果一个类中没有定义拷贝构造函数时,系统将自动生成一个默认的答案:B分析:静态成员可分为静态数据成员和静态成员函数;静态数据成员被定义后,必须对它进行初始化,初始化在类体外进行,一般放在该类的实现部分最合适,也可以放在其他位置,例如,放在主函数前面等;静态数据成员初始化与该类的构造函数和析构函数无关;在静态成员函数的实现中,可以直接引用静态成员,但不能直接引用非静态成员。
例题7:关于友元的描述中,()是错误的。
A.友元函数是成员函数,它被说明在类体内B.友元函数可直接访问类中的私有成员所以共调用了三次构造函数;每释放一个对象,系统自动调用一次析构函数,A、B、C对象释放时,分别调用析构函数,所以析构函数共调用了三次。
例题9:设A为test类的对象且赋有初值,则语句test B(A); 表示。
答案:将对象A复制给对象B。
分析:执行test B(A);语句相当于调用了默认复制构造函数,将A对象的属性复制给B对象。
C语言练习题(带详解答案)
C语言练习题(带详解答案)一单项选择题1.(A)是构成C语言程序的基本单位。
A、函数B、过程C、子程序D、子例程2.C语言程序从C开始执行。
A)程序中第一条可执行语句B)程序中第一个函数C)程序中的main函数D)包含文件中的第一个函数3、以下说法中正确的是(C)。
A、C语言程序总是从第一个定义的函数开始执行B、在C语言程序中,要调用的函数必须在main()函数中定义C、C语言程序总是从main()函数开始执行D、C语言程序中的main()函数必须放在程序的开始部分4.下列关于C语言的说法错误的是(B)A)C程序的工作过程是编辑、编译、连接、运行B)C语言不区分大小写。
C)C程序的三种基本结构是顺序、选择、循环D)C程序从main函数开始执行5.下列正确的标识符是(C)。
A.-a1B.a[i]C.a2_iD.intt5~8题为相同类型题考点:标识符的命名规则(1)只能由字母、数字、下划线构成(2)数字不能作为标识符的开头(3)关键字不能作为标识符选项A中的-,选项B中[与]不满足(1);选项D中的int为关键字,不满足(3)6.下列C语言用户标识符中合法的是(B)。
A)3a某B)某C)caeD)-e2E)union选项A中的标识符以数字开头不满足(2);选项C,E均为为关键字,不满足(3);选项D中的-不满足(1);7.下列四组选项中,正确的C语言标识符是(C)。
A)%某B)a+bC)a123D)123选项A中的%,选项B中+不满足(1);选项D中的标识符以数字开头不满足(2)8、下列四组字符串中都可以用作C语言程序中的标识符的是(A)。
A、print_3ddb8aBcB、I\\amone_halftart$it3paiC、tr_1CpppowwhileD、P某qMy->bookline#Hi.age选项B中的\\,$,选项D中>,#,.,-不满足(1);选项C中的while为关键字,不满足(3)9.C语言中的简单数据类型包括(D)。
类和对象练习题
类和对象一、选择题1、下面对方法的作用描述不正确的是:( d )A、使程序结构清晰B、功能复用C、代码简洁D、重复代码2、方法内定义的变量:( b )A 、一定在方法内所有位置可见B、可能在方法内的局部位置可见C、在方法外可以使用D、在方法外可见3、方法的形参:(a)A、可以没有B、至少有一个C、必须定义多个形参D、只能是简单变量4、方法的调用:(c)A、必须是一条完整的语句B、只能是一个表达式C、可能是语句,也可能是表达式D、必须提供实际参数5、return 语句:( d)A、不能用来返回对象B、只可以返回数值C、方法都必须含有D、一个方法中可以有多个return 语句6、void 的含义:(d)A、方法体为空B、方法体没有意义C、定义方法时必须使用D、方法没有返回值7、main()方法的返回类型是:( c )A 、boolean B、int C、void D、static8、方法重载所涉及的方法:( a )A、有相同的名字B、参数个数必须不同C、参数类型必须不同D、返回类型必须不同9、下面关于类和对象之间关系的描述,正确的是( c )A、联接关系B、包含关系C、具体与抽象的关系D、类是对象的具体化10、下面关于java中类的说法哪个是不正确的( c )A、类体中只能有变量定义和成员方法的定义,不能有其他语句。
B、构造方法是类中的特殊方法。
C、类一定要声明为public的,才可以执行。
D、一个java文件中可以有多个class定义。
11、下列哪个类声明是正确的( d)A、public void H1{…} B 、public class Move(){…}C、public class void number{}D、public class Car{…}12、下面的方法声明中,哪个是正确的(c)A、public class methodName(){}B、public void int methodName(){}C、public void methodName(){}D、public void methodName{}13、下述哪些说法是不正确的?( b )A、实例变量是类的成员变量B、实例变量是用static关键字声明的C、方法变量在方法执行时创建D、方法变量在使用之前必须初始化14、下面对构造方法的描述不正确是( b)。
第二章 C基础知识练习题及答案
第二章C++基础知识练习题1.请先阅读下面的2个程序,写出程序运行的结果,然后再上机运行程序,验证自己分析的结果是否正确。
程序1:#include <iostream> //包含头文件命令using namespace std; //使用名字空间stdint main(){cout<<"This "<<"is ";cout<<"a "<<"C++ ";cout<< "program."<<endl;return 0;}程序2:#include <iostream> //包含头文件命令using namespace std; //使用名字空间stdint main(){ int a,b,c;//定义三个变量a、b、ccout<<"Please input to a and b:"<<endl; //输出提示信息到屏幕cin>>a>>b; //等待用户从键盘输入数据c=a+b;cout<< "a+b=" ;cout<<c;cout<<endl;return 0;}2.输入以下程序,进行编译,观察编译结果,如果有错误,请修改程序,再进行编译,直到没有错误,然后进行连接和运行,并分析运行结果。
#include <iostream> //包含头文件命令using namespace std; //使用名字空间stdint main(){ int a,b;//定义两个变量a和bcout<<"Please input to a and b: "<<endl;//输出提示信息到屏幕cin>>a>>b; //等待用户从键盘输入数据cout<< "Max="<< max(a,b)<<endl; //输出结果信息至屏幕return 0; //主函数返回0至操作系统}int max(int x, int y) { return (x> y) ?x:y; } //求两个数中的大者的函数3.编写一个函数,用来求2个或3个正整数中的最大数,并在主函数中调用此函数。
python面向对象练习题(打印版)
python面向对象练习题(打印版)# Python面向对象编程练习题面向对象编程(OOP)是Python中的核心概念之一。
通过以下练习题,你可以加深对Python中类和对象的理解。
## 练习一:定义一个类1. 定义一个名为`Person`的类,包含以下属性:- `name`:姓名- `age`:年龄2. 为`Person`类添加一个初始化方法`__init__`,用于设置姓名和年龄。
3. 添加一个方法`greet`,用于打印问候语。
```pythonclass Person:def __init__(self, name, age): = nameself.age = agedef greet(self):print(f"Hello, my name is {} and I am{self.age} years old.")```## 练习二:继承和多态1. 定义一个`Student`类,继承自`Person`类。
2. 添加一个属性`student_id`来表示学生的学号。
3. 重写`greet`方法,使其打印出学生特有的问候语。
```pythonclass Student(Person):def __init__(self, name, age, student_id):super().__init__(name, age)self.student_id = student_iddef greet(self):print(f"Hello, I am {}, a student of age {self.age} with ID {self.student_id}.")```## 练习三:封装1. 创建一个名为`Car`的类。
2. 包含属性:`make`(制造商),`model`(型号),`year`(年份)。
3. 为这些属性提供私有化处理,即在属性名前加上双下划线`__`。
类图与对象图习题
2
大量名纳%义税以对人上万外游以元经纳离大挂,营税于家靠2,人查征0共经1并单询管5着同营年向位分范这探为1报被2-析围一87讨主告挂流月户、之系。, 靠域实,下外列 挂人综现小户。问 靠交上合税规原调以题一人通缴治款模则查X对、(运道管X理2企.走X.2.县X车输护理6实业X等 体1访X万0为辆县业岸费施2(县级 布师合的元2全例所对是工。户方三交: 置专治方;部,有交国是程 ,案)通X与业理法我为截人通X民学. 客设监运、措.论的。.县准道至)输经9校1运计测输教施文(一任并、交考路2,运济实3范业育设0五、务对纳通户工证作对1将业的现围税以计5)高目调税业,种号者年国车税传社与收及.林提校标查.人主货:.6内辆收统会7月时征为研草出行与的户要运X(培的登政行功底段管衡究X措教了政规情数以运一训一记策业时能,.基量。.施学现管模况题增自输).单念些在执,间的1共本一高设目在理.进加1主4设位.也高被.行浅实(:前6有情所校6计标一的行:,户经计:在校(挂情谈施四X提登况高在.活些基一以但。营原.X发的一.靠况新营)。记 校实9X摘把动高本般X远据和则生行四)人和形改监鉴自的X 是现要思,校概性低统挂.针着政、治.(X征式增测定2.交X否教:想配行念分1于7计靠河、巨管水理货X管级下后世(内单通治具学小和合政析地,经为县政大理土任运情领高,纪二容位一输理备和流行高管内,税2营例共策的具保务企况导校如以)0方:、运论竞科域教动校理容提1移为浅有,变有持.业4开安行何后总法X.强业学争研.年综育统的 出交主谈交6X这提化一监)展排政加,体与化纳(习力两交日…活一学弊 加前,小通两高,定测名了,各管强随布频理税二,的项通期…动到生端国强移我流运个政大的.下专扎项理交着局.次论人).帮全一重运:县、全更,外税交分域输1中治学借,题实任的通社.能0X治.助面个要输X.交两军好并知收的局综企(心敏校鉴以X8调1工务创运会X力理下武重职6(企1通项和地在名征户管合业一任锐园意-被研作的新输履2提目,装要能目三业运重公完以教管数理,治04)务性的义挂以。作,同路业飞职19高标在自指是 )现输大安成上育工,4户企理监,和陈。靠X调为严时径的速、。,.我全己标建 帮工税.行教现基学作,X业实.测内鉴旧 人研一格, 税发…我6始队的。立县录助程款业政育役学础家的(其9施目抓别的 主名按不 收展…大0终官头本在X一工措3税治等部目之乌建三中方的、管能行关7要消照断摘管X,中量坚兵脑论行、3作施收上一队标申议)一案.河实理力政键.采建防部提要理我队阅.持的,文政项实设征的系政。,斯1建般设为践、。管词取设监队高 ?国政0读讲学共提,管目践计管坚列治新着基与(设计例执外在理:数、督的自 笔高治和话习同高对理区 .情任定工形重提二规.浅法树改模高.据坚执条身随者校指学精者努党高的8概姓 况期性作式阐出)模谈为形革式校(持法令政着带的导习神强力性校基况名通调情以和。会下述学监.小民象强已行四.全干条治社教员.了,下修行础.:过研况来思下议,了校6测.节、,警经政).面部例觉会三育2公3加积学,养政之X任),想面上高要0看二。坚扎和很管河1协,和悟的、事X安工极习我,管上职6障我上是来校有,、身持实两难理年调只各,不总业现部环参者以进理,以四通的我,行三养小份严开学管;述可有项自断也将1节加胜对一的也畜来个过纯任深政要1殖流证格展一理创职持自规觉发9在本看讲的工步基就牧的方认洁职刻管素、成域号执、做好新报续身章学展发人,党观作坚本说业学面真性以领理,1个本综:法部两当路告2发业制习和生任产性念高定概行习0看学。来会的即指高X的队项今径、展务度政进…期 3品、,度理念政值锻X,习 的质创行标8,重正快;规1、知管治步…以0 加守把负想进管2的炼仍党 主总量新政之0人要规大节举1模建构识理,来2工党加责信行理号1和然的二要书路管头一自才意化教奏措8设建水和论人的粗规强的念简令.工存十、记高径理,6;任技义建育的 、全社平约,们%履放、学精,单以作…在八强系低和同全中术,设中校 。产们省会过束认的职,严习神进概及实肉困大化,列举比县队不坚、的园 业养肉主硬部真生情我缺党,一述新.践牛难、学特讲已增牛3指足持精所师 化育牛义,队贯活况吨知乏纪强团…,发,期产和全习向话经长存导。执细学生虽为之养和才,彻方述识品反化结…布我曾业问军,各精成3栏员 的法化、日然方恩殖谐能紧执式0职占、牌腐素和实尽.经情题和提位神6以开5各为管所常X向发的基社适紧行和如6全4教带倡质施职教况,公高领5X%来发位民理得,言:地会应围党观4下县期的给动廉作领尽,5过调主安自导通,区老、工推头,一县的当绕:肉以肉我;教为中《责达的我查要现身汇过在消师服作所动,为是的深前灭路 类来牛做从育长队建的到问与表役知报政支防,务获肉同我父目刻消火线 产关养人市等期支筑完了候老思现部识如队大我人三,牛比们母标内防救、一量心殖尊的场活坚部设成省和师考在队储下和队代的民严生增个上,涵工援方、的支呈敬道环动持一计了级崇, :政备大表心的三产长无了父把,作和加1持现的理节,班防上肉生高脑 从治和3队市中思实持3愧生母发更的执.强我5出各,看使一人火4牛观的海养工 党长%务委充想专.续于动给展加需勤政市3蓬位让,我项务规基、敬中殖作,%委述近的、满得题发真党的了肉清要训治教勃老我市深工实范;地价意浮环会能出的职年思市感到展学、一我牛醒,练育的师在受场刻作求》肉县值!现节议力栏领述来想人慨进。习无课们产地才事发,实益范认来真G牛“,观向出看精 肉导廉,大一 党…,生业认能B展同际无围识抓出要提,今他神 牛报5X学端、思步 纪…听命作识更坚发0势志工穷较到。栏X求高坚天们发和任产0告一正市绪提积一政市后和为到好定展1县头们作。窄加我3肉自持受熟展习期值 做思政又高4极、纪2很血调强的正立,:中人强深9牛0身人到悉方
C练习题
}
}在C#中,上述代码的运行结果是出现错误
运行结束
五、简答题(10分,每题5分)
40.如何区别重载方法?
41.有哪些主要的数据类型?它们之间是怎样进行相互转换的?
值类型包括整数类型、字符类型、浮点类型、布尔类型、结构类型和枚举类型。引用类型包括类、接口、委托、数组、字符串等。
C#中提供了隐式类型转换和显式类型转换。
C#练习题
一、判断题(√√××√√√×××)
1.按下按钮会引发事件。()
2.C#源代码的后缀名为.cs。( )
3.析构函数可以返回值。()
4.SQL的INSERT语句不可以对数据库进行更新。()
5.对象的this引用是对该对象本身的引用。()
6.在属性声明中,get和set访问器都必须在属性体的内部声明。()
{
Tiger t = new Tiger();
Console.Read();
}
}
class Animal
{Hale Waihona Puke public Animal()
{ Console.Write ("基类"); }
}
class Tiger : Animal
{
public Tiger()
{ Console.Write ("派生类");}
答案:B
14.引用类型主要有4种:类类型、数组类型、接口类型和()。
A.对象类型B.字符串类型C.委托类型D.整数类型
答案:C
15.加载窗体时触发的事件是( )。
A. Click B.Load C.GotFoucs D.DoubleClick
答案:B
16.类的以下特性中,可以用于方便地重用已有的代码和数据的是( ).
面向对象的C++理论与实践 复习题
复习题一、全面复习课程内容和所有平时布置的作业、课堂讲过的例题二、练习下列题型示例。
要求掌握各种基本概念和基本原理,学会灵活应用。
1、简要回答下列问题(1)什么是面向对象的程序设计?(2)什么是对象?它有哪些特征?什么是类?对象与类的关系是什么?(3)什么是消息?如何区分公有消息与私有消息?消息具有什么性质?(4)什么是多态性?在面向对象系统中多态性表现在哪些方面?(5)什么是继承性?继承的作用是什么?(6)C++是如何实现数据封装和信息隐藏的?若类间具有继承关系,则它们之间具有什么特征?(7)为什么要引入构造函数和析构函数?它们各有什么特性?(8)this指针的主要作用是什么?静态成员有哪些特性?(9)使用内部(内置)函数的优点是什么?(10)假设在程序中已经声明了类point,并建立了其对象p1和p4。
请回答以下几个语句有什么区别?①point p2,p3; ②point p2=p1; ③point p2(p1); ④p4=p1;(11)友元函数有什么作用?(12)用成员函数重载运算符和用友元重载运算符,在定义和使用上有什么不同?(13)什么是重载?函数重载有几种表现形式?(14)为什么要引入引用概念,在程序设计中它经常被用在什么场合?(15)简述引用与指针的异同。
(16)派生有几种方式,每种方式中派生类对基类成员的继承性如何?(17)派生类构造函数和析构函数的构造规则是什么?执行顺序怎样?(18)什么是多继承?多继承时,构造函数和析构函数执行顺序是怎样的?(19)在C++中的何种情况下要引入虚基类?虚基类的构造函数的调用顺序是如何规定的?(20)保护段成员与公有段成员有何差别?在派生类中如何继承?(21)什么是虚函数?函数重载与虚函数有哪些异同?(22)什么是纯虚函数?什么是抽象类?(23)在什么情况下要引入抽象类?抽象类有什么特点?(24)什么是多重继承的名字冲突?怎样解决多重继承的名字冲突?(25)C++中多态性体现在哪几方面?(26)为什么使用模板?函数模板声明的一般形式是什么?(27)函数模板与同名的非模板函数重载时,调用的顺序是怎样的?2、填空(1)面向对象的程序设计具有等特征。
C++_II_练习题(2)
C++ II 练习题(2)一.单项选择题(每题2分,共20分)1.在C++中,有关类和对象正确说法是( A )。
A.对象是类的一个实例 B.对象是类的存储空间C.一个类只能有一个对象 D.类是程序包,对象是存储空间2.在类定义中,称为接口的成员是( C )。
A. 所有类成员B. private或protected的类成员C. public的类成员D. public或private的类成员3. 一个类的友员函数能够通过( D )访问该类的所有成员。
A.静态数据 B.析构造函数 C.this指针 D.类对象参数4. 下面描述错误的是( B )。
A.自定义构造函数应该是公有成员函数 B.构造函数可以是虚函数C.构造函数在建立对象时自动调用执行 D.构造函数可以重载5. 在类的继承关系中,基类的(B)成员在派生类中可见。
A. 所有B. public和protectedC. 只有publicD. 只有protected6.设B类是A类的派生类,有说明语句A a, *ap;B b, *bp;则以下正确语句是(C)。
A. a=b;B. b=a;C. ap=&b;D. bp=&a;7.C++中,以下( D )语法形式不属于运行时的多态。
A. 根据if语句的求值决定程序流程B. 根据基类指针指向对象调用成员函数C. 根据switch语句的求值决定程序流程D. 根据参数个数、类型调用重载函数8. 假设对A类定义一个重载“+”号运算符的成员函数,以便实现两个A类对象的加法,并返回相加结果,则该成员函数的函数原型为( B )。
A.A operator +( const A &A1, const A &A2 ); B.A A:: operator +( const A &A2 );C.A::operator +( A &A2 ); D.A A::operator +( );9. 一个类模板定义了静态数据成员,则( A )。
C++程序设计练习题
C++程序设计练习题C++程序设计实验(下)练习题⼀、类与对象1.定义⼀个名为Rectangle的矩形类:(1)数据成员为矩形的长Len和宽Wid;(2)定义有参构造函数;(3)两个成员函数Area()和Length(),分别计算并输出矩形的⾯积和周长。
(4)定义主函数,创建⼀个Rectangle类对象:长为5,宽为2。
通过调⽤成员函数输出该矩形的⾯积和周长。
2.⽇期类。
定义⼀个⽇期类Cdate属性:⼀个包括年(year)、⽉(month)和⽇(day)三个整型私有数据成员。
⽅法:定义成员函数Setdate()设置⽇期、成员函数Isleapyear()判断是否为闰年、成员函数Print()输出⽇期。
定义主函数,对上述成员函数进⾏测试。
void main(){Cdate d1; //定义对象d1.Setdate(1999,12,30); //通过对象访问成员if (d1. Isleapyear())cout<<“闰年”;elsecout<<“⾮闰年!”;d1.Print();}3.员⼯问题1.定义⼀个⽇期类Date(1)私有数据成员包括:年(int year)、⽉(int month)、⽇(int day);(2)定义构造函数:Date(int _year, int _month, int _day),对数据成员进⾏初始化;(3)定义成员函数void print() const,打印⽇期信息(打印格式:年/⽉/⽇)。
2.定义⼀个员⼯类Employee(1)私有数据成员包括:姓名(char *name)、出⽣⽇期(Date birth)、⽉⼯资(double salary);(2)定义构造函数:Employee(char *_name, int year, int month, int day, double _salary),对数据成员进⾏初始化;(3)定义析构函数:~Employee(),释放堆空间;(4)定义成员函数double computSalary(double bonus) const,计算员⼯年薪(计算公式:12×⽉⼯资+年终奖),其中参数bonus为年终奖;(5)定义成员函数void print() const,打印员⼯信息,打印格式如下图所⽰。
uml综合练习题与答案
一、选择题1.软件设计中的〔〕设计指定各个组件之间的通信方式以与各组件之间如何相互作用。
A.数据B.接口C.结构D.组件2.UML 是一种〔〕。
A.面向对象的程序设计语言B.面向过程的程序设计语言C.软件系统开发方法D.软件系统建模语言3.面向对象中的〔〕机制是对现实世界中遗传现象的模拟,通过该机制,基类的属性和方法被遗传给派生类。
A.封装B.多态C.继承D.变异4.下面关于类、对象和实例的叙述中,错误的是〔〕。
A 类是创建对象的模板B 对象是类的实例C 类是对象的实例D 类是一组具有共同特征的对象集合5.下列不在UP的初始阶段中完成的A编制简要的愿景文档B粗略评估成本C定义大多数的需求D业务案例6.下面那一种模式是不属于GRASP模式的A 多态〔Ploymorphism〕B 行为对象〔pure fabrication〕C 中间者〔Indirection〕D GoF7.类是一组具有相同属性的和相同服务的对象的抽象描述,类中的每个对象都是这个类的一个。
A例证B用例C实例D例外A多态性B动态绑定C静态绑定D继承9.一个对象通过发送来请求另一个对象为其服务。
A调用语句B消息C命令D口令10.下面的陈述中,对迭代和增量式开发描述错误的是〔〕。
A. 迭代是时间定量的B. 系统是增量式增长的C. 迭代是以循环反馈和调整为核心驱动力的D. 当迭代无法依照时间表来集成、测试和稳定局部系统时,可以推迟完成日期。
11.有关UP阶段的说法,不正确的是〔〕A. UP的一个开发周期〔以系统发布作为产品结束标志〕由多个迭代组成;B. 初始阶段不是需求阶段,而是研究可行性的阶段。
C. 细化阶段就是需求或设计阶段;D. 细化阶段就是迭代地实现核心架构并解决高风险问题的阶段;12.下面关于领域模型的描述,不正确的是〔〕A. 领域模型就是软件对象图;B. 应用UML表示法,领域模型被描述为一组没有定义操作的类图;C. 创建领域模型的原因之一是帮助理解关键业务概念和词汇;D. 领域模型和领域层使用相似的命名可以减少软件表示与我们头脑中的领域模型之间的差异。
csharp练习题
C练习题一、基础语法1. 声明一个整型变量并赋值为10。
2. 声明一个浮点型变量并赋值为3.14。
3. 声明一个字符串变量并赋值为"Hello, World!"。
4. 声明一个布尔变量并赋值为true。
5. 创建一个名为`MyClass`的类,并在其中声明一个名为`myField`的私有整型字段。
6. 在`MyClass`类中添加一个构造函数,接受一个整型参数并赋值给`myField`字段。
7. 在`MyClass`类中添加一个名为`PrintField`的方法,打印出`myField`字段的值。
二、控制结构8. 编写一个程序,使用`if`语句判断一个整数变量是否大于0。
9. 编写一个程序,使用`switch`语句根据整数变量的值输出对应的星期名称。
10. 编写一个程序,使用`for`循环打印1到10的数字。
11. 编写一个程序,使用`foreach`循环遍历一个整数数组并打印每个元素。
12. 编写一个程序,使用`while`循环计算1到10的阶乘。
三、函数和方法13. 编写一个名为`Add`的方法,接受两个整数参数并返回它们的和。
14. 编写一个名为`Multiply`的方法,接受两个整数参数并返回它们的乘积。
15. 编写一个名为`PrintNumbers`的方法,接受一个整数参数,打印从1到该参数的所有数字。
16. 编写一个名为`ReverseString`的方法,接受一个字符串参数并返回其反转后的字符串。
17. 编写一个名为`FindMax`的方法,接受一个整数数组参数并返回数组中的最大值。
四、面向对象18. 创建一个名为`Person`的类,包含姓名和年龄两个属性。
19. 在`Person`类中添加一个构造函数,接受姓名和年龄作为参数。
20. 在`Person`类中添加一个名为`PrintInfo`的方法,打印出该人的姓名和年龄。
21. 创建一个`Student`类,继承自`Person`类,并添加一个名为`Grade`的属性。
类与对象练习题
C++类与对象习题一.问答题1.解释public和private的作用,公有类型成员与私有类型成员有什么区别?2.Protected 关键字有何作用?3.构造函数和析构函数有什么作用?二.选择题1.不是构造函数的特征()。
A. 构造函数的函数名与类名相同。
B. 构造函数可以重载。
C.构造函数可以设置缺省参数。
D.构造函数必须指定类型说明。
2.是析构函数的特征()。
A. 析构函数名与类名不同。
B. 析构函数的定义只能在类体内。
C.析构函数可以有一个或多个参数。
D.一个类中只能定义一个析构函数。
3.关于成员函数的特征的描述中,()是错误的。
A. 成员函数一定是内联函数。
B. 成员函数可以重载。
C.成员函数可以设置缺省参数。
D.成员函数可以是静态的。
4.由于常对象不能被更新,因此_________A.通过常对象可以调用任何不改变对象值的成员函数B.通过常对象只能调用它的常成员函数C.通过常对象只能调用静态成员函数D.常对象的成员都是常成员5 .下列对函数的缺省参数的定义和描述及对函数的调用中错误的为______.A. void show(char *text, int length=-1,int color=0);B. int getcolor(int pal);void show(char *text,int length=-1,int color=getcolor(pal));C.在设置了函数的缺省参数后,调用函数的对应实参就可以省略。
D. show(“how are you!”, ,);6.下列有关静态成员的叙述中,_______是正确的。
A、静态数据成员不是所有对象所共享的B、在类中声明静态数据成员时可以进行初始化C、静态成员函数只能访问类的静态成员D、非静态成员函数不能访问类的静态成员1.7.下面对引用的描述中是错误的。
A. 引用是某个变量或对象的别名B. 建立引用时,要对它初始化C. 对引用初始化可以使用任意类型的变量D.引用与被引用的变量是同一个地址。
(完整)C++面向对象程序设计习题 类与对象
类和对象(一)知识点:1.类与对象的概念,及两者的关系?2.类定义的格式,对象定义的格式,访问对象的成员的格式3.类中成员访问权限有哪几种,它们的特点?4。
如何对对象进行初始化?5。
构造函数与析构函数的特点,构造函数在哪些情况下被系统自动调用,析构函数什么情况下被调用;存在虚基类的派生类构造函数调用顺序?6.缺省构造函数的特点7。
拷贝构造函数的功能与特点8。
成员函数与内联函数的区别9.静态成员的概念与作用10.静态成员函数调用格式11.什么是友元,友元的作用12.作用域运算符的功能是什么?它的使用格式如何?13.满足成员函数重载的条件作业题一、选择填空1.在下列关键字中,用以说明类中公有成员的是( )。
A . public; B.private; C.protected; D.friend。
2.下列的各类函数中,( )不是类的成员函数.A.构造函数; B.析构函数; C.友员函数; D.拷贝初始化构造函数。
3.作用域运算符的功能是( )。
A.标识作用域的级别的;B.指出作用域的范围的;C.给出作用域的大小的;D.标识某个成员是属于哪个类的。
4.( )是不可以作为该类的成员的.A.自身类对象的指针;B.自身类的对象;C.自身类对象的引用;D.另一个类的对象。
5.( )不是构造函数的特征。
A.构造函数的函数名与类名相同;B.构造函数可以重载;C.构造函数可以重载设置缺省参数;D.构造函数必须指定类型说明。
6.()是析构函数的特征。
A.一个类中能定义一个析构函数;B.析构函数名与类名不同;C.析构函数的定义只能在类体内;D.析构函数可以有一个或多个参数。
7.通常的拷贝初始化构造的参数是()。
A.某个对象名;B.某个对象的成员名;C.某个对象的引用名;D.某个对象的指针名。
8.关于成员函数特征的下述描述中,( )是错误的。
A.成员函数一定是内联函数;B.成员函数可以重载;C.成员函数可以设置参数的缺省值;(只能一次)D.成员函数可以是静态的。
c课后习题解答
第6章;类和对象(一)练习题66.1判断题×1.使用class定义的类,其默认的访问权限是公有的,使用struct定义的类,其默认的访问权限是私有的。
×2.类中的成员函数都是公有的,数据成员都是私有的。
×3.定义在类体内的成员函数是内联函数,定义在类体外的成员函数不能是内联函数。
√4.类定义后,它的成员个数及名称就不会再被改变了。
×5.定义或说明对象时,系统会自动调用构造函数为创建的对象初始化。
如果类中没有定义任何构造函数时,就无法给定义的对象初始化。
√6.定义一个对象时,系统只为该对象的数据成员开辟内存空间,而成员函数是同类对象共享的。
√7.对象成员的表示方法与结构变量成员的表示方法相同。
√8.创建对象时系统自动调用相应的构造函数为对象初始化,没有相应的构造函数时,系统会自动生成。
√9.构造函数是一个其名与类名相同的特殊的成员函数。
×10.析构函数是一个函数体为空的成员函数。
√11.构造函数和析构函数都是系统自动调用的成员函数。
×12.构造函数和析构函数都可以重载。
√13.成员函数与一般函数一样可以重载、内联和设置参数的默认值。
×14.静态成员是指静态对象的成员。
×15.静态数据成员必须在构造函数的成员初始化列表中进行初始化。
√16.静态成员都可以使用类名加作用域运算符的方法来引用。
×17.静态成员函数中引用静态数据成员和非静态数据成员的方式是相同的。
√18.常成员指的是类体内使用const关键字说明的常数据成员和常成员函数。
×19.常数据成员在常成员函数中的值是不允许改变的,而在非常成员函数中是允许改变的。
√20.常对象需要引用常成员函数,而不能引用非常成员函数。
×21.常对象的数据成员都是常数据成员。
√22.友元函数是说明在类体内的非成员函数,它可以访问类中的所有成员。
×23.可以把一个一般函数说明为某类的友元函数,也可以将某类的成员函数说明为另类的友元函数。
C++程序设计练习题及答案第五章类与对象
第5章类与对象5.1 选择题1. 在下列结构变量的定义中,不正确的是( d )。
(a) struct employee{ char name[ 20 ] ;long code ;} emp ;(b) struct{ char name[ 20 ] ;long code ;} emp ;(c) struct employee{ char name[20];long code;} ;employee emp;(d) struct{ char name[20];long code;} employee;employee emp;2.已知有职工情况结构变量emp定义为:struct employee{ char name[ 20 ] ;long code ;struct{ int year ;int month ;int day ;} birth ;} emp ;下列对 emp 的 birth 正确赋值方法是( d )。
(a) year = 1980 ; month = 5 ; day = 1 ;(b) birth.year = 1980 ; birth.month = 5 ; birth.day = 1 ;(c) emp.year = 1980 ; emp.month = 5 ; emp.day = 1 ;(d) emp.birth.year = 1980 ; emp.birth.month = 5 ; emp.birth.day= 1 ;3.假定有以下声明和定义,则下面引用形式错误的是( b )。
1struct student{ int num ;float score ;} stu[3] = {{1001,80},{1002,75},{1003,91}}, *p = stu ; (a) p->num (b) (p++).num (c) (p++)->num (d) (*p).num4.下列四个运算符中,优先级最低的是( a )。
12-4类与对象练习题面向对象 (1)
A)成员函数一定是内联函数B)成员函数可以重载
C)成员函数可以设置参数的默认值D)成员函数可以是静态的
14. C++中对于结构中定义的成员,其默认的访问权限为()。
A)publicB)protectedC)privateD) static
15.为了使类中的成员不被类的对象通过成员操作符来访问,则不能把该成员的访问权限设置为()。
A、对象是类的一个实例
B、任何一个对象只能属于某个的类
C、一个类只能有一个对象
D、类与对象的关系和数据类型与变量的关系相似
3、下列关于构造函数的描述中,错误的是()。
A、构造函数可以设置默认参数
B、构造函数在定义类对象时自动执行
C、构造函数可以是内联函数
D、构造函数不可以重载
4、下列有关析构函数的说法中,()是错误的。
a.disp( );
return0;
}
该程序运行后的输出结果是()。
A)displB)disp2C)displdisp2D)程序编译时出错
24.若有以下程序:
#include<iostream.h>
classsample
{inti;
public:
voidsetvalue(intm){i=m;}
voidfun(intm){i+=m;}
staticints;
voiddis()
{
cout<<s<<endl;
}
};
intsample::s=0;
voidmain(){
samplea(2),b(5),c(a);
a.add();
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
c类和对象练习题Standardization of sany group #QS8QHH-HHGX8Q8-GNHHJ8-HHMHGN#第8章类与对象8.1知识要点1.掌握类与对象的概念和定义方法,掌握类成员的访问属性。
2.掌握构造函数的概念、定义方法和使用方法。
3.掌握析构函数的概念、定义方法和使用方法。
4.掌握拷贝构造函数的概念、定义方法和使用方法。
5.掌握包含对象成员的类构造函数的定义方法。
6.掌握静态成员的概念、定义方法、作用和特点。
7.掌握友元的概念、定义方法、作用和特点。
8.掌握类模板的定义格式与使用方法。
8.2典型例题分析与解答例题1:下列有关类的说法不正确的是()。
A.对象是类的一个实例B.任何一个对象只能属于一个具体的类C.一个类只能有一个对象D.类与对象的关系和数据类型与变量的关系相似答案:C分析:对象是类的一个实例,类与对象的关系和数据与变量的关系相似,所以一个类可以有多个对象。
例题2:下面()项是对构造函数和析构函数的正确定义。
A.void X::X(), void X::~X()B.X::X(参数),X::~X()C.X::X(参数),X::~X(参数)D.void X::X(参数),void X::~X(参数)答案:B分析构造函数无返回类型、可带参数、可重载;析构函数无返回类型、不可带参数、不可重载。
例题3:()的功能是对象进行初始化。
A.析构函数B. 数据成员 C.构造函数 D.静态成员函数答案:C分析:当一个对象定义时,C++编译系统自动调用构造函数建立该对象并进行初始化;当一个对象的生命周期结束时,C++编译系统自动调用析构函数注销该对象并进行善后工作;例题4:下列表达方式正确的是()。
A.class P{B.class P{public: public:int x=15; int x;voidshow(){cout<<x;} void show(){cout<<x;}}; }C. class P{ D. class P{intf; public:}; int a;f=25; void Seta (int x) {a=x;}答案:D分析:在类体内不可对数据成员进行初始化;类定义结束时需用分号;只有类中的成员函数才能存取类中的私有数据。
例题5:拷贝构造函数具有的下列特点中,()是错误的。
A.如果一个类中没有定义拷贝构造函数时,系统将自动生成一个默认的B.拷贝构造函数只有一个参数,并且是该类对象的引用C.拷贝构造函数是一种成员函数D.拷贝构造函数的名字不能用类名答案:D分析:如果一个类中没有定义拷贝构造函数时,系统将自动生成一个默认的;拷贝构造函数只有一个参数,并且是该类对象的引用;拷贝构造函数的名字与类同名,并且不被指定返回类型;拷贝构造函数是一种成员函数。
例题6:关于静态成员的描述中,()是错误的。
A.静态成员可分为静态数据成员和静态成员函数B.静态数据成员定义后必须在类体内进行初始化C.静态数据成员初始化不使用其构造函数D.静态数据成员函数中不能直接引用非静态成员答案:B分析:静态成员可分为静态数据成员和静态成员函数;静态数据成员被定义后,必须对它进行初始化,初始化在类体外进行,一般放在该类的实现部分最合适,也可以放在其他位置,例如,放在主函数前面等;静态数据成员初始化与该类的构造函数和析构函数无关;在静态成员函数的实现中,可以直接引用静态成员,但不能直接引用非静态成员。
例题7:关于友元的描述中,()是错误的。
A.友元函数是成员函数,它被说明在类体内B.友元函数可直接访问类中的私有成员C.友元函数破坏封装性,使用时尽量少用D.友元类中的所有成员函数都是友元函数答案:A分析:友元函数是非成员函数,在类体内说明了,在类体外定义,定义和调用等同于一般的普通函数;由于它可以直接访问类的私有成员,因此破坏了类的封装性和隐藏性,尽量少用。
例题8:设有如下程序结构:class Box{ … };void main(){Box A,B,C; }该程序运行时调用 (1) 次构造函数;调用 (2) 次析构函数。
答案:(1)3(2)3分析:每创建一个对象自动调用一次构造函数,在这里创建了A、B、C三个对象,所以共调用了三次构造函数;每释放一个对象,系统自动调用一次析构函数,A、B、C对象释放时,分别调用析构函数,所以析构函数共调用了三次。
例题9:设A为test类的对象且赋有初值,则语句test B(A); 表示。
答案:将对象A复制给对象B。
分析:执行test B(A);语句相当于调用了默认复制构造函数,将A对象的属性复制给B 对象。
例题10:利用“对象名.成员变量”形式访问的对象成员仅限于被声明为 (1)的成员;若要访问其他成员变量,需要通过 (2) 函数或 (3) 函数。
答案:(1) public (2) 成员函数 (3)友元函数分析:类体内的数据成员可声明为公有的、私有的和保护的,公有的数据成员可利用“对象名.成员变量”形式来进行访问;私有的数据成员能被类中的其他成员函数或友元函数所调用;保护的数据成员可以在类体中使用,也可以在派生类中使用,但不能在其他类外通过对象使用。
例题11:分析找出以下程序中的错误,说明错误原因,给出修改方案使之能正确运行。
#include<>class one{ int a1,a2;public:one(int x1=0, x2=0);};void main(){one data(2,3);cout<<<<endl;cout<<<<endl;}分析:出错原因:构造函数参数表语法错;构造函数没有函数体;类的对象不能直接访问类的私有成员变量。
改正后的程序如下:#include<>class one{ int a1, a2;public:one(int x1=0, int x2=0) {a1=x1;a2=x2;}int geta1(){ return a1; }int geta2(){ return a2; }};void main(){one data(2,3);cout<<()<<endl;cout<<()<<endl;}例题12:分析以下程序的错误原因,给出修改方案使之能正确运行。
#include <>class Amplifier{float invol,outvol;public:Amplifier(float vin,float vout){invol=vin;outvol=vout;}float gain();};Amplifier::float gain(){ return outvol/invol; }void main(){Amplifier amp,;cout<<"\n\nThe gain is =>"<<gain()<<endl;}分析:成员函数在类体外定义格式是:函数返回类型类名::成员函数名(参数表);成员函数调用格式是:对象名.成员函数名(参数表)。
改正后的程序如下:#include <>class Amplifier{ float invol,outvol;public:Amplifier(float vin,float vout) {invol=vin;outvol=vout;}float gain();};float Amplifier::gain(){ return outvol/invol;}void main(){ Amplifier amp,;cout<<"\n\nThe gain is =>"<<()<<endl;}例题13:下列程序的运行结果是。
#include <>class point{int x,y;public:point(int a,int b){x=a;y=b;cout<<"calling the constructor function."<<endl;}point(point &p);friend point move(point q);~point(){cout<<"calling the destructor function.\n";}int getx(){return x;}int gety() {return y;}};point::point(point &p){x=;y=;cout<<"calling the copy_initialization constructor function.\n";}point move(point q){cout<<"OK!\n";int i,j;i=+10;j=+20;point r(i,j);return r;}void main(){ point m(15,40),p(0,0);point n(m);p=move(n);cout<<"p="<<()<<","<<()<<endl;}分析:根据构造函数、拷贝构造函数和友元函数的特点,执行该程序后,输出结果是:calling the constructor function.calling the constructor function.calling the copy_initialization constructor function.calling the copy_initialization constructor function.OK!calling the constructor function.calling the copy_initialization constructor function.calling the destructor function.calling the destructor function.calling the destructor function.P=25,60calling the destructor function.calling the destructor function.calling the destructor function.说明:(1)构造函数执行三次,分别初始化主函数中的对象m,p和move函数中的对象r。