Q(int a=0,int b=0){ x=a;y=b; }
void P(){ cout< ~Q() { cout<<\调用析构函数!\\n\ }; void main() { Q q(50); q.P(); cout<<\退出主函数!\\n\ } 53.以下程序的运行结果为〖B〗 #include { x=a; cout<<\ A( ) { cout << \ … }; class B:public A{ int y; public: B(int a,int b) { y=a; cout<<\ … }; void main() { B b1(2,3);} A)call A(int) B)call A( ) C)call B(int,int) call B(int,int) call B(int,int) 54.以下程序的运行结果为〖B〗 #include A(int a=0) { x=a;cout< class B{ int y; public: B(int a=0) { y=a;cout< 10 D)call A(int) }; class C:public A,public B{ int z; public: C(int a=0,int b=0):B(a+20),A(a) { z=b;cout< void main() { C c(100,200); } A)120,100,200 B)100,120,200 C)200,100,120 D)200,120,100 55.以下程序的运行结果为〖B〗 #include A(int a=0) {x=a;cout< class B{ int y; public: B(int a=0) {y=a;cout< class C: public B,virtual public A{ int z; public: C(int a=0,int b=0):B(a+20),A(a) {z=b; cout< void main() { C c(100,200); } A)120,100,200 B)100,120,200 C)200,100,120 D)200,120,100 三、判断下列各种描述是否正确,对者划√,错者划×。 ×(1)一个类中可以只有公有成员,也可以只有私有成员,也可以公有、私有成员都有。 ×(2)用class定义的类中,默认的访问权限是公有的。 √(3)指向对象的指针的成员表示与对象的成员表示所使用的运算符不同。 ×(4)构造函数是用来初始化所定义的对象,如果一个类中没有定义任何构造函数, 则该类的对象便无法初始化。 √(5)定义一个对象时系统只存储其数据成员,而不存储对象的成员函数,成员函数 是同类对象所共享的。 11 ×(6)析构函数是一个函数体为空的成员函数。 ×(7)构造函数和析构函数都可以重载,因为它们都是成员函数。 √(8)如果一个成员函数只存取一个类的静态数据成员,可将该成员函数说明静态成 员函数。 ×(9)在类的构造函数中可对其静态数据成员进行初始化。 √(10)友元类中的所有成员函数可以对该类中的私有成员进行存取操作。 √(11)指向对象的指针和对象都可以作为函数参数,但是使用前者比使用后者好些。 ×(12)对象引用作函数参数不如使用对象指针方便。 √(13)对象数组的元素必须是同一个类的对象。 √(14)一维对象指针数组的每一个元素应该是某个类的对象的地址。 √(15)运算符new可以创建变量或对象,也可以创建数组。 √(16)const类型说明符可以用来说明各种不同类型的常量,也可以说明const成员函数。 ×(17)对象成员的初始化可以不在该类的构造函数中。 √(18)转换函数是类的成员函数,它是用来进行强制类型转换的。 √(19)C++语言中,允许单继承,也允许多继承。 ×(20)派生类不能再派生新的类。 ×(21)在公有继承中,派生类可以访问基类中的私有成员。 √(22)在公有继承中,派生类的对象不可以访问基类中的保护成员。 √(23)在私有继承中,派生类的对象不可以访问基类中的公有成员。 √(24)在保护继承中,派生类可以访问基类中的保护成员。 ×(25)基类的析构函数可以被派生类继承。 ×(26)在多继承情况下,派生类构造函数对基类构造函数的执行顺序取决于它的成员初始化表中说明的基类顺序。 √(27)虚基类是用来解决多继承中公共基类在派生类中只产生一个拷贝的问题。 √(28)函数参数个数和类型都相同,只是返回值类型不同,这不是重载函数 ×(29)重载函数不能带有缺省参数,因为可能出现二义性 √(30)个别运算符不能重载,运算符重载是通过对它重新定义函数来实现的 √(31)运算符重载有两种形式:成员函数和友元函数 √(32)运算符重载后,不改变原来的优先级和结合性 √(33)虚函数是一种用virtual说明的成员函数 ×(34)抽象类中只能有一个纯虚函数 ×(35)构造函数和析构函数都不能说明为虚函数 √(36)动态联编是在运行时选择操作函数的 √(37)程序中可以说明抽象类的指针或引用,但是不能说明抽象类的对象 √(38)使用提取符(>>)可以输入各种变量的值,但不能输入地址值。 ×(39)使用插入符(<<)可以输出各种变量的值,但不能输出地址值。 √(40)预定义的提取符和插入符都是可以重载的。 ×(41)函数write()是用来将一个字符串送到一种输出流中,但是它只能将一个字符串 12 中全部字符送到输出流中。 √(42)控制当前格式化状态的标志字中,每一位标志一种格式。这种格式既可以被设 置也可以被清除。 √(43)控制符本身可以是一种对象,它可以直接被提取符或插入符操作。 √(44)使用打开文件函数前应先定义一个流对象,然后使用open()函数来操作该对 象。 √(45)read()和write()函数可以读写文本文件,也可以读写二进制文件。 √(46)以app方式打开文件时,当前的读指针和写指针都定位于文件尾。 √(47)C++的I/O流库中所提供的读写函数对标准流和一般流都是相同的。 四、分析下列程序的输出结果。 (1)#include class A { int a1,a2; public: A() { 1=a2=0; cout<<\} A(int i,int j) { a1=i; a2=j; cout<<\ } void print() { cout<<\ } }; void main() { A x,y(3,9); x.print(); y.print(); } 参考答案: Default constructor called. Constructor called. a1=0,a2=0 a1=3,a2=9 (2)#include class B { int b1,b2; public: B() { } B(int i,int j) { b1=i; b2=j; } void printB( ) { cout<<\ }; class A { int a; B c; public: A() { } 13 A(int i,int j,int k):c(i,j),a(k) { } void printA() { c.printB(); cout<<\ } }; void main() { A x(12,65,100); x.printA(); } 参考答案: b1=12,b2=65 a=100 (3)#include class C { static int c; public: C() { cout<<++c< int C::c=0; void main() { C c1,c2,c3,c4,c5; cout< 参考答案: 1 2 3 4 5 5 5 4 3 2 1 (4)#include class M { int m1,m2; public: M(int i,int j) { m1=i; m2=j; } void Sum(M a,M b) { m1=a.m1+b.m1; m2=a.m2+b.m2; } void print() { cout<<\ } 14