1、
class A
{
public:
A(){printf("1\n");}
~A(){printf("2\n");}
print(){printf("3\n");}
};
class B:public A
{
public:
B(){printf("4\n");}
virtual ~B(){printf("5\n");}
virtual print(){printf("6\n");}
};
class C:public B
{
public:
C(){printf("7\n");}
virtual ~C(){printf("8\n");}
virtual print(){printf("9\n");}
};
void main()
{
A *a = (A*)new B();
a->print();
B *b = (B*)new C();
b->print();
//delete a; //取消注释会运行时报错
delete b;
}
输出结果:
1
4
3
1
4
7
9
8
5
2
2、什么是内存对齐
3、虚析构函数的作用
自动调用基类部分的析构函数对基类的设计有重要影响。
删除指向动态分配对象的指针时,需要运行析构函数在释放对象的内存之前清除对象。处理继承层次中的对象时,指针的静态类型可能与被删除对象的动态类型不同,可能会删除实际指向派生类对象的基类类型指针。如果删除基类指针,则需要运行基类析构函数并清除基类的成员,如果对象实际是派生类型的,则没有定义该行为,要保证运行适当的析构函数,基类中的析构函数必须是析构的。
4、C++代码效率优化
5、质数判断