xqn2017

导航

记录三 20180514

1、成员变量的初始化有哪几种方式?区别是什么?哪种效率高?

很明显,有两种初始化方式,构造初始化列表和构造函数体内赋值初始化,这里介绍一个类初始化的注意点

1)类里面的成员变量在类定义的时候是不能初始化的

在类的定义的时候并没有分配内存,没法赋值,当用类构造对象时先分配内存然后调用构造函数,这时候才可以初始化非静态变量,而静态变量在定义的时候就已经在静态存储区中分配了内存,可以初始化;

类定义相当于声明,并没有分配空间,类是一个抽象类型,可以实例化不同的个体,每个个体特征不一样,因此再实例化对象时根据对象的特征进行初始化,保持类的抽象性。

2)一般的数据成员可以在构造函数中初始化,就是上面说的那两种

3)const数据成员必须在构造函数的初始化列表中初始化

4)static在类的定义外初始化

static修饰的类的静态成员在main()函数之前就在全局数据段中产生了,其生命周期与类的对象是异步的,而且静态也表明即使没有类实体的存在,静态成员也是存在的,这个时候对象的生命周期还没开始,如果在类内初始化静态数据成员,那么静态成员就需要依赖类的存在,如果类始终没有实例化,那么静态成员就没法得到初始化了,从这个角度看,静态数据成员只能在类外初始化,实际上,静态成员变量录属于类,不属于某个对象,所以静态成员不可能占用某个对象的存储空间,所以静态成员要在类外初始化。

5)数组成员是不能在初始化列表初始化

6)不能给数组指定显示的初始化

2、两个静态库里有很多相同的函数,如何解决冲突问题?

3、纯虚函数的作用?

4、C可以写面向对象吗?如何写?

5、析构函数为什么一定是虚函数?

当基类操作派生类时,析构时防止只析构基类而不析构派生类的情况发生,

析构函数不一定必须是虚函数,是否为虚函数取决于该类的使用,一般该类为基类产生继承和多态时,才会是虚函数,单独使用可以不是虚函数。之所以在继承和多态时设计为虚函数是因为当new派生类并且用基类指针指向这个派生类,在销毁基类指针时只会调用基类的析构函数,不会调用派生类的析构函数,因为基类无法操作派生类中非继承的成员,这样就造成派生类只new无法delete造成内存泄露。 2.默认不是虚析构函数是因为如果析构函数为虚函数就需要编译器在类中增加虚函数表来实现虚函数机制,这样所需内存空间就更大了,因此没有必要默认为虚析构函数。

6、同步请求和异步请求?

7、网络编程了解多少?

8、平时看的技术类书籍?

posted on 2018-05-15 15:01  xqn2017  阅读(83)  评论(0编辑  收藏  举报