一,简答题(每题2分)
1, 类的定义
2, 类的特征
3, 类和对象的关系
4, 类和结构体的异同
5, 派生类中存在子对象的情况下,生成对象时的构造顺序是什么,析构顺序是什么
6, 类的析构函数为什么一般定义为虚析构函数
7, 类的静态成员变量及const成员变量的初始化情况
8, 类的静态成员函数及const成员函数的使用情况
9, 静态成员变量与普通成员变量的区别,静态成员变量与全局变量的区别
10, 空类情况下,默认会产生哪些类成员函数
11, 构造函数与析构函数的重载
12, 构造函数 explicit 与普通构造函数的区别
13, 什么是复制构造函数,什么情况下会使用到它,什么是神复制和浅复制
14, 什么时候编译器会生成默认的复制构造函数,什么情况下不会生成,如果已经写了一个构造函数,编译器还会生成复制构造函数吗,
15, 复制构造函数与赋值函数的区别
16, 什么是临时对象,临时对象在什么情况下产生
17, 什么样的类型变量下只能使用初始化列表进行初始化
18, 什么是类的友元函数,类的友元函数有哪几种,类的友元函数对类的成员的访问权限
19, 内联函数与宏定义的区别,内联函数一般使用的场合,内联函数的缺点
20, 类的继承分为几种方式,派生类在继承后对基类的访问存在哪几种情况
21, 多重继承时,如何解决多路径访问冲突问题(二义性)
22, 画出普通继承与虚继承的内存情况
23, 虚函数是如何解决多路径访问冲突问题
24, 什么是多态,虚函数如何实现多态
25, 虚函数是如何实现动态绑定的
26, 纯虚函数的作用,抽象类的作用及使用注意事项
27, 函数重载的内部机制是什么, 函数重载与覆写的区别
28, 函数模板的实现机制是什么
29, 什么是静态联编,什么是动态联编,分别通过什么来实现
30, 什么是引用,引用的初始化,引用的好处,常引用的使用注意事项,引用与指针的区别,为什么引用比指针安全
31, new/delete 与 malloc/free 的区别
32, 什么是泛型编程
33, 函数模板与类模板是什么,它们之间有什么区别
34, 使用模板有什么缺点,如何避免
35, 什么是模板的特化,部分模板特化与全部模板特化有什么区别
36, 什么是STL
37, STL序列容器有哪些
38, 具体说明STL如何实现vector
39, list 与 vector 的区别
40, deque 的内存是如何分配的,与vector 有什么区别
41, STL有哪几种适配器,分别使用的场合是什么
42, 什么是函数对象
43, 在vector中如何实现自定义排序
二,读程序题(每题2分)
1, 以下代码中的输出语句输出0吗?为什么?
struct Test
{
Int m_i;
Test(int i):m_i(i){}
Test(){Test(0)}
};
Int main()
{
Test test;
Cout << test.m_i << endl;
}
2, 写出构造函数及析构函数执行的顺序
Class A
{
Private :
Int a;
Public:
A(int aa){cout << “A()” << endl; a = aa;}
~A(){cout << “~A() ” << a << endl;}
};
Class B
{
Private:
Int b;
Public:
B(int aa = 0, int bb = 0):A(aa), B(bb){cout << “B()” << endl;}
~B(){cout << “~B() ” << b << endl;}
};
3, 写出代码执行的结果
Class B
{
Public:
B(){cout << “B() default constructor” << endl;}
B(B &b){cout << “copy constructor” << endl; data = b.data;}
B(int i):data(i){cout << “constructed by parameter: ” << data << endl;}
~B(){cout << “~B() destructed” << endl;}
};
B play( B b)
{
Return b;
}
Main()
{
B t1 = play(5);
B t2 = play(t1);
}
Main()
{
B t1 = play(5);
B t2 = play(10);
}
三,编程题(每题4分)
1, MyString类的实现
2, 模板链表的实现