Class One : public Two
{
public:
One()
{
Three three;
cout << "something";
}
private:
Four _four;
};
我必须显示一句话:“一二三四五六七”,第一类必须保持不变。每个类在构造函数和析构函数中都不能显示多个单词。
所以......我发现我的基类是四级。我也做了建设。 &安培; destr。在每个班级,并试图在他们的身体写东西,但这就是我的输出:
Class Four Constructor:
Class Three Constructor:
Class Two Constructor:
Class Four Constructor:
Class Four Constructor:
Class Three Constructor:
Class One Constructor:
Class Three Destructor:
Class Four Destructor:
DESTRUCTION:
Class One Destructor:
Class Four Destructor:
Class Two Destructor:
Class Three Destructor:
Class Four Destructor:
我的主要职能:
int main()
{
One one; //<---- it also have to remain
cout << endl;
cout << "DESTRUCTION:\n";
}
我已经阅读了一些关于继承的文章,但仍然不知道如何在类constr中显示单词。 &安培;析构函数,但不要做两次或更多,即使我创建这些类的对象,就像它在第一类中完成。
P.S对不起语法和其他错误;)
答案 0 :(得分:4)
我们可以根据One
的已知定义(以及我对C ++构造规则的记忆,可能不是100%准确:-)来推断,而不考虑任何其他可能的继承关系课程:
Two()
(作为基类构造函数)的输出位于所有其他构造函数的输出之前,Four()
(属于派生类的成员)的输出,Three()
(One()
构造函数中的本地对象),One()
本身的输出,~Three()
的输出(作为局部变量,从One()
返回时超出范围。)在这里我们构建了闪亮的One
对象。由于我们无法用它做多少,让我们摧毁它!请注意,所有对象都与其构造顺序完全相反;这是一个基本的C ++规则。因此
~Four()
的输出(因为成员在其拥有者之前被销毁),~One()
的输出,因为类的派生部分在其基本部分之前被销毁),~Two()
的输出最后被销毁。这为您输出了七个可能的数字,因此您无需任何其他基类或成员。只需将正确的数字放入正确构造函数的输出中即可。析构函数: - )
答案 1 :(得分:1)
你已将此标记为家庭作业,所以我不打算告诉你答案......
此练习似乎旨在帮助您了解构造函数和析构函数的调用顺序。由于您只能使用类继承,成员变量,构造函数和析构函数,因此它们是您确定程序流的唯一机制,因此也就是输出的顺序
有些问题:
我建议从一个简单的例子开始。两个类,每个类都有一个构造函数和析构函数,另一个是另一个子类。在每个功能中打印一些内容,然后查看订购。然后添加另一个类,使其成为成员变量。会发生什么?
因为,你必须输出奇数个单词,一个类必须只在它的构造函数或析构函数中打印,但不能同时打印。
顺便说一句,在你的问题类中,第四类不是基类。
祝你好运!答案 2 :(得分:1)
答案 3 :(得分:0)
您可能正在尝试确定调用构造函数的顺序。当你调用一个构造函数时,超类的构造函数首先执行(注意我比Java更熟于Java,所以在这里要小心)。因此,如果One从继承自Three的两个继承并且您调用One的构造函数,那么顺序将是:Three,Two,One。
答案 4 :(得分:0)
也明白这一点 -
从标准文档,删除,
在第一个替代(删除对象)中,如果操作数的静态类型不同 从动态类型来看,静态类型应该是操作数的动态类型的基类,而静态类型应该有一个虚析构函数,或者行为是未定义的。