我有代码,再这样下去C++类的构造函数和析构函数
class A_
{
public:
int k;
A_(int a):k(a)
{cout<<"A_'s constructor called"<<endl;
}
virtual ~A_()
{
cout<<"class A_ destructor"<<endl;
}
virtual void getval() { cout<<k<<endl;}
};
class A : public A_
{
public:
int m;
A(int a):A_(2),m(a){cout<<"A's constructor called"<<endl;}
virtual void getval()
{
cout<<"m is "<<m<<endl;
}
~A()
{
cout<<"class A destructor"<<endl;
}
};
int main()
{
A A1(1);
A_(2);
cin.get();
}
当我运行这段代码,我得到的结果这是这样的
A_'s constructor called
A's constructor called
(达至cin.get()
程序)
A_'s constructor called
class A_ destructor
我期待A类中创建的对象A_要销毁立即像当main()
A_(2)
执行的情况下,但它不是发生在这里。
1)为什么A_
类的对象,具有A
沿创建的:当程序到达端(输入一些文本作为输入后)
class A destructor
class A_ destructor
课题的A_
对象仅销毁对象不会立即销毁?
2)基类的对象调用派生类的方法时是否有任何情况?特别是A_
对象可以调用getval()
的A
对象吗?
你知道继承是什么,它是如何工作的?为了回答你的第二个问题 - 是的,这就是多态性的基础。 – littleadv
@littleadv你说得对,我对继承的理解并不完整,我以为基类的对象是在派生类对象中创建的,我没有想到需要基类构造函数来初始化数据成员派生的形式基类。感谢提示。 – Gautam