首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >C++继承练习

C++继承练习
EN

Stack Overflow用户
提问于 2011-01-06 22:36:35
回答 5查看 2K关注 0票数 3
代码语言:javascript
复制
      Class One : public Two
        {
        public:
           One()
           {
              Three three;
              cout << "something";
           }
        private:
           Four _four;
       };

我必须显示一句话:“一、二、三、四、五、六、七”,第一类必须保持原样。每个类都不能在其构造函数和析构函数中显示多个单词。

所以..。我已经计算出我的基类是class 4。我还创建了constr。& destr。并试图在他们的身体中写一些东西,但这就是我在输出中得到的:

代码语言:javascript
复制
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:

我的主要功能是:

代码语言:javascript
复制
int main()
{
 One one; //<----  it also have to remain
 cout << endl;
 cout << "DESTRUCTION:\n";
}

我读过一些关于继承的文章,但仍然不知道如何在类中显示单词。&析构函数,但不要做两次或更多,即使我创建了这些类的对象,就像在第一个类中一样。

P.S为语法和其他错误道歉;)

EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2011-01-06 22:53:42

仅根据已知的One定义(以及我对C++构造规则的记忆,这可能不是100%准确:-),我们可以推断出什么,没有考虑到类之间任何其他可能的继承关系:

  1. Two() (作为基类构造函数)的输出在所有其他构造函数的输出之前,
  2. Four() (属于派生类的成员)的输出紧随其后,
  3. 然后是Three() (<代码>D10构造函数中的本地对象)、
  4. 的输出,然后是One()本身、
  5. 的输出,然后是~Three() (作为局部变量,从One()).

返回时超出范围)的输出

在这里,我们构造了闪亮的One对象。既然我们对它无能为力,那就销毁它吧!请注意,所有对象都以与其构造顺序相反的顺序销毁;这是一个基本的C++规则。因此

  1. 首先是~Four() (因为成员在它们的所有者之前被销毁)、
  2. (然后是不存在的~One()的输出,因为类的派生部分在其基部分之前被销毁)、
  3. 的输出,然后是~Two()作为基部分的输出最后被销毁。<代码>H230<代码>G231

这给了您七个可能的数字来输出,因此您不需要任何额外的基类或成员。只需将正确的数字放入正确的构造函数和析构函数的输出中:-)

票数 4
EN

Stack Overflow用户

发布于 2011-01-06 23:01:28

你已经把它标记为家庭作业了,所以我不打算告诉你答案...

本练习的目的似乎是帮助您理解构造函数和析构函数的调用顺序。由于您只能使用类继承、成员变量、构造函数和析构函数,因此它们是确定程序流以及输出顺序的唯一机制

以下是一些问题:

首先执行主体的

  • 是派生类构造函数还是基类构造函数?在包含类的构造函数之前执行的成员变量的构造函数destructors?
  • Is又如何呢?那么析构函数呢?

我建议从一个简单的例子开始。两个类,每个类都有构造函数和析构函数,一个子类化另一个子类化。在每个函数中打印一些内容,然后查看排序。然后添加另一个类,使其成为成员变量。会发生什么?

由于您必须输出奇数个单词,因此一个类只能在其构造函数或析构函数中打印,而不能同时在这两个函数中打印。

顺便说一句,在你的问题中,第四类不是基类。

祝好运!

票数 1
EN

Stack Overflow用户

发布于 2011-01-07 00:11:46

好了,完成了:]感谢您的回复,特别是Péter Török :)

代码语言:javascript
复制
class Two
{
public:
    Two()
    {
        cout << "Class Two Constructor: ONE" << endl;
    }
    ~Two()
    {
        cout << "Class Two Destructor:" << endl;
    }
};

class Three
{
public:
    Three()
    {
        cout << "Class Three Constructor: THREE" << endl;
    }
    ~Three()
    {
        cout << "Class Three Destructor: FIVE" << endl;
    }
};

class Four
{
public:
    Four()
    {
        cout << "Class Four Constructor: TWO" << endl;
    }
    ~Four()
    {
        cout << "Class Four Destructor: SEVEN" << endl;
    }
};


class One: public Two
{
public:
    One()
    {
        Three Three;
        cout << "Class One Constructor: FOUR" << endl;
    }
    ~One()
    {
        cout << "Class One Destructor: SIX" << endl;
    }
private:
    Four _Four;
};

和输出:

代码语言:javascript
复制
Class Two Constructor: ONE
Class Four Constructor: TWO
Class Three Constructor: THREE
Class One Constructor: FOUR
Class Three Destructor: FIVE

DESTRUCTION:
Class One Destructor: SIX
Class Four Destructor: SEVEN
Class Two Destructor:
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/4616037

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档