D's cons.f D's des. A's des. C's des.
B's des. A's des.
五、程序填充。
1、virtual void Print()=0; 2、Derive1(int i):Base(i) {} 3、public:
Derive2(int i):Base(i) {} void Print() {
cout<<\ } 4、Base *obj 5、输出结果:
Derive1 *d1=new Derive1(1); Derive2 *d2=new Derive2(2);
模拟试题三
一、填空题。
1.类、对象、继承
2.内联函数、inline、友元、friend 3.私有的(private)
4.public private protected protected private protected 5.this指针、成员函数形参 6.解决二义性问题、virtual 7.虚函数、指针或引用
二、选择题。
1.A 2.D 3.C 4.D 5.D 6.D 7.A 8.C 9.B 10.A
三、改错题。
1.x2.writeme(2);出错。原因如下:非常对象可以调用常成员函数和非常成员函数,而常对象只能调用常成员函数。
2.参考答案如下: #include
public: //成员默认访问权限为private,不能被类的对象所访问 void SetStation(int Station); int GetStation(); private:
int itsStation;
}; //类定义结束时未使用语句结束符; void main() {
TV myTV;
myTV.SetStation(9); //私有成员不能被类对象myTV直接访问 myTV.SetStation(10);
TV myOtherTV; //使用默认构造函数建立对象时不需要提供参数 cout< 四、出下列程序的输出结果。 1.Con. Copy con. Con. Assignment. Copy con. Con. Copy con. Assignment. 2.A's con. B's con. A's con. C's con. C's des. A's des. B's des. A's des. 五、将下列程序补充完整。 1.(1) pumpkin(int w) (2) total_weight-=weight; (3) int pumpkin::total_weight=0; (4) pumpkin::total_display(); 说明:(1)源程序中pumkin应为pumpkin; (2)total_weight++;应为total_weight+=weight; 2. (1) virtual void compute()=0; (2) l_to_g(double i):convert(i) {} (3) public: f_to_c(double i):convert(i) {} void compute() { val2=(val1-32)*5/9; cout< (4) convert& f 二、填空题(本大题共20小题,每空1分,共35分) 1. 若已定义:int a; unsigned b; long c; 语句:a=-2;b=a;c=b;则b中的值为 65534 ,c中的值为 65534 语句:a=-2;b=a;c=a;则b中的值为 65534 ,c中的值为 -2 语句:a=70000L;a=c;b=c;则a中的值为 4464 ,b中的值为 4464 语句:a=-131071L;a=c;b=c;则b中的值为 -1 ,c中的值为 65535 2.C++语言的函数参数传递方式有值传递和 地址传递 、 引用传递 。 3.当使用new动态生成一个对象时,隐含着对 构造函数 的一次调用;而当使用delete删除一个对象时,隐含着对 析构函数 的一次调用。 4.一个抽象类的派生类可以实例化的必要条件是实现了所有的 纯虚函数 。 5.多态性可分为二类 编译时多态 和 运行时多态 。 6.在编译时确定调用哪个函数的机制称为静态联编,函数重载和 模板 是这机制的典型体现。运行时确定调用哪个函数的机制称为 动态联编 ,虚函数是这机制的典型体现。 7.派生类中所定义的虚函数的 访问属性 不影响对它的动态联编,即基类中已定义的虚函数,其同名函数放在 派生类中的 任何地方 ,都可以实现运行时多态性。 8.每个对象都维护了一个指向自身的指针,这个指针称为 this 指针。 一、选择填空(2) 1.在下列关键字中,用于说明类中公有成员的是( A )。 A.public; B.private; C.protected; D.friend 2.在下列的各类函数中,( C )不是类的成员函数。 A.构造函数; B.析构函数; C.友元函数; D.拷贝初始化构造函数 3.作用域运算符的功能是( D )。 A. 标识作用域的级别的; B. 指出作用域的范围的; C ..给定作用域的大小的; D. 标识某个成员是属于哪个类的。 4.( B )是不可以作为该类的成员的。 A. 自身类对象的指针; B. 自身类的对象; C. 自身类对象的引用; D. 另一个类的对象。 5.( D )不是构造函数的特征。 A. 构造函数的函数名与类名相同; B. 构造函数可以重载; C. 构造函数可以设置缺省参数; D. 构造函数必须指定类型说明。 6.( A )是析构函数的特征。 A. 一个类中只能定义一个析构函数; B. 析构函数名与类名不同; C. 析构函数的定义只能在类体内; D. 析构函数可以有一个或多个参数。 7.通常的拷贝初始化构造函数的参数是( C )。 A. 某个对象名; B. 某个对象的成员名; C. 某个对象的引用名; D. 某个对象的指针名。 8.关于成员函数特征的下述描述中,( A )是错误的。 A. 成员函数一定是内联函数; B. 成员函数可以重载; C. 成员函数可以设置参数的缺省值; D. 成员函数可以是静态的。 9.下述静态数据成员的特性中,( D )是错误的。 A. 说明静态数据成员时前边要加修饰符static; B. 静态数据成员要在类体外进行初始化; C. 引用静态数据成员时,要在静态数据成员名前加<类名>和作用域运算符; D.静态数据成员不是所有对象所共用的。 10.友元的作用( A )。 A. 提高程序的运用效率; B. 加强类的封装性; C. 实现数据的隐藏性; D. 增加成员函数的种类。 二、判断下列描述的正确性,对者划√,错者划×。 1.使用关键字class定义的类中缺省的访问权限是私有(private)的。T 2.作用域运算符(::)只能用来限定成员函数所属的类。T 3.析构函数是一种函数体为空的成员函数。F 4.构造函数和析构函数都不能重载。F 5.说明或定义对象时,类名前面不需要加class关键字。T 6.对象成员的表示与结构变量成员表示相同,使用运算符.或->。T 7.所谓私有成员是指只有类中所提供的成员函数才能直接使用它们,任何类以外的函数对它们的访问 都是非法的。F 8.某类中的友元类的所有成员函数可以存取或修改该类中的私有成员。T 9.可以在类的构造函数中对静态数据成员进行初始化。F 10.如果一个成员函数只存取一个类的静态数据成员,则可将该成员函数说明为静态成员函数。T 一、选择填空(3) 1.下列对派生类的描述中,( D )是错的。 A. 一个派生类可以作另一个派生类的基类; B. 派生类至少有一个基类; C. 派生类的成员除了它自已的成员外,还包含了它的基类的成员; D.派生类中继承的基类成员的访问权限到派生类保持不变。 2.派生类的对象对它的基类成员中( A )是可以访问的。 A. 公有继承的公有成员; B. 公有继承的私有成员; C. 公有继承的保护成员; D. 私有继承的公有成员。 3.对基类和派生类的关系描述中,( B )是错的。 A. 派生类是基类的具体化; B. 派生类是基类的子集; C. 派生类是基类定义的延续; D. 派生类是基类的组合。 4.派生类的构造函数的成员初始化列中,不能包含( C )。 A. 基类的构造函数; B. 派生类中子对象的初始化; C. 基类的子对象初始化; D. 派生类中一般数据成员的初始化。 5.关于子类型的描述中,( A )是错的。 A. 子类型就是指派生类是基类的子类型; B. 一种类型当它至少提供了另一种类型的行为,则这种类型是另一种类型的子类型; C. 在公有继承下,派生类是基类的子类型; D.子类型关系是不可逆的。 6.关于多继承二义性的描述中,( C )是错的。 A. 一个派生类的两个基类中都有某个同名成员,在派生类中对这个成员的访问可能出现二义性; B. 解决二义性的最常用的方法是对成员名的限定法; C. 基类和派生类中同时出现的同名函数,也存在二义性问题; D.一个派生类是从两个基类派生来的,而这两个基类又有一个共同的基类,对该基类成员进行访问时,也可能出现二义性。 7.设置虚基类的目的是( B )。 A. 简化程序; B. 消除二义性; C. 提高运行效率; D. 减少目标代码。 8.带有虚基类的多层派生类构造函数的成员初始化列表中都要列出虚基类的构造函数,这样将对虚基类的子 对象初始化( D )。 A. 与虚基类下面的派生类个数有关; B. 多次; C. 二次; D. 一次。 二、判断下列描述的正确性,对者划√,错者划×。 1.C++语言中,既允许单继承,又允许多继承。T 2.派生类是从基类派生出来,它不能再生成新的派生类。F 3.派生类的继承方式有两种:公有继承和私有继承。F 4.在公有继承中,基类中的公有成员和私有成员在派生类中都是可见的。F 5.在公有继承中,基类中只有公有成员对派生类对象是可见的。T 6.在私有继承中,基类中只有公有成员对派生类是可见的。F 7.在私有继承中,基类中所有成员对派生类的对象都是不可见的。T 8.在保护继承中,对于垂直访问同于公有继承,而对于水平访问同于私有继承。T 9.派生类是它的基类的组合。T 10.构造函数可以被继承。F 11.析构函数不能被继承。T 13.只要是类M继承了类N,就可以说类M是类N的子类型。F 14.如果A类型是B类型的子类型,则A类型必然适应于B类型。T 15.多继承情况下,派生类的构造函数的执行顺序取决于定义派生类时所指定的各基类的顺序。T 16.单继承情况下,派生类中对基类成员的访问也会出现二义性。F 12.子类型是不可逆的。T C++选择题 1. 关于类和对象不正确的说法是( ) A) 类是一种类型,它封装了数据和操作 B) 对象是类的实例 C) 一个类的对象只有一个 D) 一个对象必属于某个类 2. 在类定义的外部,可以被访问的成员有( ) A) 所有类成员 B) private或protected的类成员 C) public的类成员 D) public或private的类成员 3. 关于this指针的说法错误的是( ) A) this指针必须显示说明 B) 当创建一个对象后,this指针就指向该对象 C) 成员函数拥有this指针 D) 静态成员函数不拥有this指针 4. 声明一个类的对象时,系统自动调用( )函数,撤消对象时,系统自动调用( )函数 A) 成员函数 B) 构造函数 C) 析构函数 D) 普通函数 5. 下面对构造函数的不正确描述是( )