c++定义一个父类一个子类,然后主函数中father *p=new son;顺序是是:父类构造函数,子类构造,父类析构

为什么没有子类析构函数的调用?

第1个回答  2011-06-28
因为你只定义了指向父类的指针,在主函数执行完后,只会销毁父类型指针p,p当然只会调用自己的析构函数了。如果你这样定义,
son *p=new son;
那么在销毁的时候,就会先调用son的析构函数,再调用father的析构函数。本回答被提问者采纳
第2个回答  2011-06-19
在父类析构函数前面加virtual

如:
virtual ~father()
{
}
这样会创建虚函数表,才能通过父类指针访问子类析构

c++定义一个父类一个子类,然后主函数中father *p=new son;顺序是是:父...
因为你只定义了指向父类的指针,在主函数执行完后,只会销毁父类型指针p,p当然只会调用自己的析构函数了。如果你这样定义,son *p=new son;那么在销毁的时候,就会先调用son的析构函数,再调用father的析构函数。

C++中指向派生类指针问题
father *p=new son即是用son初始化了一个father类指针(类型兼容原则第三条);多态(动态绑定)的实现靠的就是虚函数,一个类有虚函数,则有虚表,father有father的虚表,son有son的虚表,用一个vptr指针标记虚表入口。若father里有虚函数fun,son重写fun函数,则p->fun实际调用的是son中的fun,若s...

C++中用父类对象初始化子类的构造函数是怎么回事
include <iostream>using namespace std; class father{public: father(father& c) :x(c.x),y(c.y){}private: int x; int y;}; class son{public: son(father& c) :father(c),z(0){} private: int z;};

c++中父类对象和子类对象之间如何转换
Base::Base( const Base &base);注意这个函数的参数是一个父类对象引用。首先将一个父类Base的引用base绑定到子类对象,然后将该引用作为实参传递给copy构造函数。copy构造函数使用 子类B1对象的父类部分,对a进行初始化。构造函数运行完毕,就产生了对象a。从父类到派生类的自动转换是不存在的。...

C++中 dynamic_cast转换的是数据类型还是指向的数据类型?
father *p = new father ;dynamic_cast<son *>(p);这个结果是NULL,这点楼上的解释的很清楚啊。(画图水平有限了,略丑,莫怪,o(╯□╰)o)你看一下上图,如果你用father *p = new father ;那么你只新建了S1的空间,但是son的存储空间是S3的大小,有S2大小的存储空间你根本就没有创建,就算...

C++构造父亲类和和一个儿子类,两个类中各表示其各自年龄的数据成员,写...
getAge() { return this -> son_age; } friend int operator + ( Father dad, Son child ) { return dad.Father :: getAge() + child.Son :: getAge(); }private: int son_age;};int main(){ Father dad( 40 );...

C++中的静态联编和动态联编这样子理解对不对?
当Father类中存在一个函数Fun没有virtual修饰符,无论是Father和Son对其的调用都是调用Fun本身,因为Fun的实现不存在多态。这里理所应当是静态联编。当Father类中的存在一个虚函数VFun,且有如下调用:Father* f = new Son;f->VFun ();此时在f对象生成时存在一份虚表,该虚表记录下了所有f中的虚...

定义一个父类类型的引用指向一个子类的对象有什么用
1.从对象的内存角度来理解.假设现在有一个父类Father,它里面的变量需要占用1M内存.有一个它的子类Son,里面的变量需要占用0.5M内存.现在通过代码来看看内存的分配情况:2.f = new Father();\/\/系统将分配1M内存.Son s = new Son();\/\/系统将分配1.5M内存!因为子类中有一个隐藏的引用super会指向...

Java方法重写时需要的5个问题!
方法重写最简单的示例如下,定义一个父类 Father 和子类 Son,父类中有一个 method 方法,而在子类中会重写 method 方法,具体实现代码如下。 父类 Father 实现代码如下:\/***父类*\/classFather{publicvoidmethod(Stringname){System.out.println("Father:"+name);}} 子类中重写父类 method 方法,...

...c++程序我是想练习子类的构造函数由父类构造函数初始化,但是提示m...
A( int a, int b ) : B( m, n ){ } 改成 A( int a, int b ) : B( a, b ){ } 这里B( a, b )确切说不是声明了,而是使用了。一般情况下是这么写的 \/\/ .h 头文件class A : public B{public : A( int a, int b );}\/\/ .cpp 文件A::A( int a, int b):...

相似回答