C++学习笔记07

1:子类析构时要调用父类的析构函数吗?
析构函数调用的次序是先派生类的析构后基类的析构,也就是说在基类的的析构调用的时候,派生类的信息已经全部销毁了。
定义一个对象时先调用基类的构造函数、然后调用派生类的构造函数;析构的时候恰好相反:先调用派生类的析构函数、然后调用基类的析构函数。
注意基类的析构函数要用virtual虚析构函数。

2:基于构造函数的特点,不能将构造函数定义为虚函数,但可以将析构函数定义为虚函数。为什么呢? 一般情况:当派生类的对象从内存中撤销时,会先调用派生类的析构函数,然后自动调用基类的析构函数,如此看来析构函数也没有必要定义为虚函数。
但如考虑如下这种情况,如果使用基类指针指向派生类的对象,而这个派生类对象恰好是用new运算创建的,这种情况下会如何呢?当程序使用delete运算撤销派生类对象时,这时只会调用基类的析构函数,而没有调用派生类的析构函数。如果使用的是虚析构函数的话,就不一样了,所以定义虚析构函数有时候还是很有必要的。
所以,基类的析构函数要用virtual虚析构函数。

3:下面的函数是什么意思?

int func(x) 
{   
    int countx = 0; 
    while(x)
    { 
        countx ++; 
        x = x&(x-1); 
    } 
    return countx; 
} 

这道题就是统计二进制形式的x中1的个数。为什么呢?每一次和x-1做与运算,都会把一个1变成0,好好想一下,最好手动比划一下。

4:类型安全:什么是类型安全呢?类型安全很大程度上可以等价于内存安全,类型安全的代码不会试图访问自己没被授权的内存区域。
C++是不是类型安全的?很明显不是,要知道C++的指针是万能的,两个不同类型的指针之间可以强制转换(用reinterpret cast)或者任意访问内存。C#是类型安全的,Java就是类型安全语言。

5:kleefp的问题:在连接liblffsolver.so的时候会报如下错误:
C++学习笔记07_第1张图片
这个可能是这样的原因,函数执行之前要做一些初始化工作,类似_init()子类的操作,可能在执行初始化的部分出现了crash。
这是以后在接手别人工作的时候可能遇到的问题。

你可能感兴趣的:(C++,学习笔记)