logo资料库

C++二级考试重点.doc

第1页 / 共11页
第2页 / 共11页
第3页 / 共11页
第4页 / 共11页
第5页 / 共11页
第6页 / 共11页
第7页 / 共11页
第8页 / 共11页
资料共11页,剩余部分请下载后查看
C++考试重点 一、选择题 1.关于函数重载:A A.两个或两个以上的函数取相同的函数名,但形参的个数或类型不同 B.两个以上的函数取相同的名字和具有相同的参数个数,但形参的类型可以不 同 C 两个以上的函数名字不同,但形参的个数或类型相同 . D.两个以上的函数取相同的函数名,并且函数的返回类型相同 2. 关于引用: A. 每一个引用都是其所引用对象的别名,因此必须初始化 V B . 形式上针对引用的操作实际上作用于它所引用的对象 V C . 一旦定义了引用,一切针对其所引用对象的操作只能通过该引用间接进行 X D. 不需要单独为引用分配存储空间 V 3. 关于封装,B A . 通过封装,对象的全部属性和操作结合在一起,形成一个整体 B. 通过封装,一个对象的实现细节被尽可能地隐藏起来(不可见) C.通过封装,每个对象都成为相对独立的实体 D. 通过封装,对象的属性都是不可见的 4. 判断 A 派生类的对象可以赋给基类的对象 V B.派生类的对象可以初始化基类的引用 V C.派生类的对象可以直接访问基类中的成员 X D .派生类的对象的地址可以赋给指向基类的指针 V 5.对于类定义 Class { public: virtual void funy( ){ } void funx( ){ } } class B:public m{ public: void funy( ){cout<<〃class B func 1〃<和作用域运算符; V D. 静态数据成员不是所有对象所共用的。V 8.关于函数模板: A. 函数模板也是一个具体类型的函数 X B . 函数模板的类型参数与函数的参数是同一个概念 X C . 通过使用不同的类型参数,函数模板可以生成不同类型的函数 V D 用函数模板定义的函数没有类型 X
9. 下列哪种调用方式是引用调用。C A. 形参和实参都是变量 C. 形参是引用,实参是变量 B.形参是指针,实参是地址值 D.形参是变量,实参是地址值 填空题: 1. 为了提高程序的运行速度,可将不太复杂的功能用函数实现,此函数应选择 ( 内联 )函数。 2.面向对象方法的多态性是指( 针对一消息,不同的对象可以以适合自身的方 式加以响应 )。 3. 当一个成员函数被调用时,该成员函数的( this 指针 ) 指向调用它的对象。 4.在公有继承的情况下,基类数据成员在派生类中的访问权限是什么? 保持不变,派生类会继承基类的成员函数和成员变量,在公有继承的情况下, 派生类不改变基类成员的访问权限。 5. 静态数据成员在类外进行初始化,且静态数据成员的一个拷贝被类的所有对 象 ( 共享 6. 构造函数与析构函数除功能不同外,在定义形式上,它们的区别还包括构造 函数名与类名相同,而析构函数名是在类名前加一个~、 析构函数__没有___(有 /没有)参数 、 析构函数___可以__(可以/不可以)定义为虚函数 。 7.在类作用域中能够直接使用该类的(任何 )成员名进行访问。 ) 。 8. 面向对象的程序设计有四大特征,它们是? 1.抽象: 抽象就是忽略一个主题中与当前目标无关的那些方面,以便更充分地注意与 当前目标有关的方面。抽象并不打算了解全部问题,而只是选择其中的一部分, 暂时不用部分细节。比如,我们要设计一个学生成绩管理系统,考察学生这个对 象时,我们只关心他的班级、学号、成绩等,而不用去关心他的身高、体重这些 信息。抽象包括两个方面,一是过程抽象,二是数据抽象。过程抽象是指任何一 个明确定义功能的操作都可被使用者看作单个的实体看待,尽管这个操作实际上 可能由一系列更低级的操作来完成。数据抽象定义了数据类型和施加于该类型对 象上的操作,并限定了对象的值只能通过使用这些操作修改和观察。 2.继承: 继承是一种联结类的层次模型,并且允许和鼓励类的重用,它提供 了一种明确表述共性的方法。对象的一个新类可以从现有的类中派生,这个过程 称为类继承。新类继承了原始类的特性,新类称为原始类的派生类(子类),而 原始类称为新类的基类(父类)。派生类可以从它的基类那里继承方法和实例变 量,并且类可以修改或增加新的方法使之更适合特殊的需要。这也体现了大自然 中一般与特殊的关系。继承性很好的解决了软件的可重用性问题。比如说,所有 的 Windows 应用程序都有一个窗口,它们可以看作都是从一个窗口类派生出来 的。但是有的应用程序用于文字处理,有的应用程序用于绘图,这是由于派生出 了不同的子类,各个子类添加了不同的特性。 3.封装: 封装是面向对象的特征之一,是对象和类概念的主要特性。封装是把过程和 数据包围起来,对数据的访问只能通过已定义的界面。面向对象计算始于这个基 本概念,即现实世界可以被描绘成一系列完全自治、封装的对象,这些对象通过 一个受保护的接口访问其他对象。一旦定义了一个对象的特性,则有必要决定这 些特性的可见性,即哪些特性对外部世界是可见的,哪些特性用于表示内部状态。 在这个阶段定义对象的接口。通常,应禁止直接访问一个对象的实际表示,而应 通过操作接口访问对象,这称为信息隐藏。事实上,信息隐藏是用户对封装性的 认识,封装则为信息隐藏提供支持。封装保证了模块具有较好的独立性,使得程 序维护修改较为容易。对应用程序的修改仅限于类的内部,因而可以将应用程序 修改带来的影响减少到最低限度。 4. 多态性: 多态性是指允许不同类的对象对同一消息作出响应。比如同样的加法,把两 个时间加在一起和把两个整数加在一起肯定完全不同。又比如,同样的选择编辑 -粘贴操作,在字处理程序和绘图程序中有不同的效果。多态性包括参数化多态
性和包含多态性。多态性语言具有灵活、抽象、行为共享、代码共享的优势,很 好的解决了应用程序函数同名问题。 9. 动态联编要满足哪两个条件? 调用的函数是虚函数、用指针或引用调用虚函数 10. 在 C++类中,有一种不能定义对象的类,这样的类只能被继承,称之为 ( 抽象类 ) ,定义该类至少具有一个( 纯虚函数 ) 。 11. 在 C++类中,const 关键字可以修饰对象和成员函数,const 对象不能( 调 用类中的非 const 成员函数 ) ,const 成员函数不能 ( 修改类的 private 数据成员 ) 。 12. 举出 C++中两种代码复用的方式: ( 继承 ) 、 ( 复用 ) 。 假定 AA 为一个类,a 为该类公有的数据成员,px 为指向该类对象的一个指针, 则访问 px 所指对象中数据成员 a 的格式为( x.a )。;如果是静态成员,直 接 AA::a,对象为 x.a,指针访问为 x->a 14. 假定 AA 为一个类,int a()为该类的一个成员函数,若该成员函数在类定 义体外定义,则函数头为( int AA::a() )。 15. 类的构造函数是在定义该类的一个( 对象 )时被自动调用执行的。 16. 假定一个类 AB 只含有一个整型数据成员 a,用户为该类定义的带参构造函 数可以写为( AB(int aa=0) {a=aa;} )。 17. 对于任一个类,用户所能定义的构造函数的个数至多为( 任意个 )。 18. 对类对象成员的初始化是通过构造函数中给出的( 初始化表或函数体 ) 实现的。 19. 被非静态成员函数访问的类的数据成员可以是( 静态数据成员) 20. 引入友元的主要目的是( 提高程序的效率和灵活性 )。。 判断: 1. 构造函数不是类的成员函数 X C++中,成员函数包括构造函数、析构函数、私有函数和公有函数四种 2. 引用一旦初始化,就维系在一定目标上,任何对该引用的赋值都不能使引 用维系在其他目标上。V 3. 函数重载的目的是提高运行效率。X 使用方便,提高可读性 4. 类的静态数据成员需要在定义每个类的对象时进行初始化 X 5. 函数的参数和返回值类型可以是简单数据类型,也可以是指针、引用、数组 和类。X 6.在基类中被说明为虚函数的类的成员函数必须在每个派生类中说明为虚函数, 才能具有多态的特征。X 7. 在类定义时,并不给类分配存储实间,因此类定义中不允许对其数据成员直 接进行初始化。V 8.C++中使用了新的注释符(//),C 语言中注释符(/*…*/)不能在 C++中使 用。(X) 9.返回值类型、参数个数和类型都相同的函数也可以重载。(X)
10. 某类中的友元类的所有成员函数可以存取或修改该类中的私有成员。(X ) 错误 不能存取或修改该类的 static 成员和 const 成员 11. 对象数组的元素可以是不同类的对象。(X ) 12. Const int 。 *p 说明了 p 是指向整型的常量指针。(V ) 阅读程序,写出运行结果 #include class AA{ public: AA(int i,int j) {A=i;B=j;cout<<"Constructor\n";} AA(AA &obj) {A=obj.A+10;B=obj.B+50;cout<<"Copy_Constructor\n";} ~AA() void print() {cout<<"Destructor\n";} {cout<<"A="<print(); delete pa; 结果:Constructor Copy_Constructor A=15,B=58 Constructor A=4,B=6 Destructor #include Class T {public: T(int x){a=x;b+=x;}; static void display(T c) {cout<<”a=”< Class CC1 {public:CC1(int i) {cout<<”调用 CC1 的构造函数:”<
}; Class A: public CC5,public CC1 {public: A(int a,int b,int c,int d):CC1(c),CC5(b),b5(a),b1(d) {cout<<”调用 A 的构造函数:”< class M { public: void f1( ) {} M( ){} proteLted: int j1; private: int i1; }; class N: proteLted M {puNliL: void f5( ){} N( ) {} proteLted: int j5; privMte: int i5; }; class L: proteLted N {public: void f3( ) {} L( ) {} proteLted: int j3; private: int i3; }; (1)派生类 N 中成员函数 f5()能否访问基类 M 中的成员 f1(),i1,j1; 答案:1(),i1 可以访问 j1 不可以 private 是任何继承方式都不能访问的 (2)派生类 N 的对象 N 能否访问基类 M 中的成员 f1(),i1,j1; 答案:f1()可以访问,i1 只能在内部直接访问不能被对象访问,j1 不能 (3)派生类 C 中成员函数 f3()能否访问基类 N 中的成员 f5(),i5,j5; 能否访问 基类 M 中的成员 f1(),i1,j1; 答案:f5(),j5 可以访问 f1(),i5 可以访问 j1 不行 (4) 派生类 C 的对象 c 能否访问基类 N 中的成员 f5(),i5,j5; 能否访问基类 M 中的成员 f1(),i1,j1; 答案:f5()可以 ,j5 不行, f1 可以, i1 j1 不行 百度原题: #include class A {public: void f1(); protected: int j1; private:
int i1; }; classB:public A { public: void f2(); protected: int j2; private: int i2; }; class C:public B {public: void f3(); }; 回答下列问题: 1.派生类 B 中成员函数 f2()能否访问基类 A 中的成员:f1(),i1 和 j1? 2.派生类 B 的对象 b1 能否访问基类 A 中的成员:f1(),i1 和 j1? 3.派生类 C 中成员函数 f3()能否访问直接基类 B 中的成员:f2() 和 j2?能否 访问间接基类 A 中的成员:f1(),i1 和 j1? 4.派生类 C 的对象 c1 能否访问直接基类 B 中的成员:f2() 和 j2?能否访问间 接基类 A 中的成员:f1(),i1 和 j1? 1.f1(),i1 可以访问 j1 不可以 private 是任何继承方式都不能访问的 2.f1()可以访问,i1 只能在内部直接访问不能被对象访问,j1 不能 3.f2(),j2 可以访问 f1(),i1 可以访问 j1 不行 4.f2()可以 j2 不行 f1 可以,i1,j1 不行 1 设计一个立方体类 Nox,它能计算并输出立方体的体积和表面积。 第一种代码:#include using namespace std; class Box { public: Box(double t) { a = t; volume = 0.0; area = 0.0; } double seta(double i) { a = i; return a; } double getvolume() { volume = a * a*a; return volume; } double getarea() { area = 6 * a*a; return area; } void disp() { getvolume();
getarea(); cout << "=>体积" << volume << ",表面积" << area << endl; } private: double a, volume, area; }; int { main() Box obj1(3.1); cout << "obj1"; obj1.disp(); Box obj2(5.6); cout << "obj2"; obj2.disp(); system("PAUSE"); } 第二种代码: #include using namespace std; class Box { private: double length; double volume; double area; public: Box(double l) { length = l; volume = 0.0; area = 0.0; } double getVolume() { return length * length * length; } double getArea() { return length * length * 6; } void show() { volume = getVolume(); area = getArea(); cout << "立 方体的体积:" << volume << ",表面积:" << area << endl; } }; int main() { int length = 0; cout << "请输入立方体的边长:"; cin >> length; Box box(length); box.show(); getchar(); system("PAUSE"); return 0; } 第三种代码: #include class Nox { public: Nox(double t ) { } { a=t; volume=0.0; area=0.0; double seta(double i )
a=i; return a; double getvolume() volume=a*a*a; return volume; double getarea() area=6*a*a; return area; } { } { } void disp() { getvolume(); getarea(); cout<<"=>体积"< #include using namespace std; class Employee { public: Employee() {}; virtual void gongzi() { cout << "no"; } void xianshi() { cout << "no"; } string name; ~Employee() {}; string id; }; class Manger :public Employee { public: Manger(string s1, string s2) { name = s1; id = s2; } void gongzi() { cout << name << "的月工资为:" << sal << endl; cout << endl; } void xianshi() { cout << "经理的姓名为:" << name << endl; cout << "经理的 ID 为:" << id << endl; }
分享到:
收藏