C++ Base *p=new Derived

来源:百度知道 编辑:UC知道 时间:2024/09/28 11:10:31
class Base{
Base(){...};
}
class Derived:public Base{
Derived(){...};
}
main (){
Base *b=new Derived();//这里有没有调用Derived的构造函数???
delete b;
}

请回答具体一点,谢谢。
请具体解释一下 子类和父类的 构造/析构函数 的调用情况????????

是这样的,在new Derived()时,是先调用父类的构造函数,然后调用子类的构造函数,一定是这样的过程。在析构时,是相反的顺序,即先调用子类的西沟函数,然后调用父类的析构函数。这里有一点特别需要注意,那就是通过这种方式Base *b=new Derived();声明时,也就是用new创建一个子类对象,然后再把这个指针赋值给基类时,对于构造函数来说,仍然是先调用父类构造函数,然后是子类构造函数,但是析构函数只有把它们声明为虚析构函数时,才能先调用子类析构函数,然后是调用父类析构函数,如果不声明为虚析构函数,那么只能够调用父类的析构函数,这个就是用到new与析构函数时需要注意的地方。

Base *b=new Derived();
不加括弧或者没有参数则调用默认构造函数如果你没有定义自己的默认构造函数 则会产生错误!

这里调用了 Derived()构造函数~
注:这里有个顺序关系~
因为你的Derived继承Base~
所以在构造Derived前要先构造Base对象~
不知道这个回答您是否满意~

我的理解是这样的:
new Derived():这一步首先产生一个Derived的对象,这一步当然是调用Derived自己的构造函数。注意new也可以看作是一个函数,它返回一个Derived*类型的指针。
当Base *b = 这个指针时,进行了类型转换,把原来的Derived*指针转成了Base*指针。