繁体   English   中英

c++ 中没有数据成员的派生 class 的问题

[英]Problem with derived class in c++ with no data member

我正在学习 c++ inheritance 并面临以下练习的问题,以创建基础 class A 和派生的 ZA2F2ED4F8DCEBC2CBBDZC21A21A2 具有某些要求。 我的答案写在下面,但似乎存在一些问题。 在这篇文章的最后,我还有几个问题。

A级

class A {
    private:
        int x;
    protected:
        A (): x(0) { } 
        A (int n): x(n) { }
        int get() const {return x;}
    public:
        virtual void foo() = 0;
};

B类

class B : public A {
    public:
        B (): { A(); }
        B (int n): { A(n); }
        virtual void foo() { std::cout << get();}
};

我的问题是:

  1. 我很确定我的代码没有正确编写,但是谁能告诉我什么是不正确的?
  2. 由于xA中是私有的,因此B将无法继承该数据成员。 那么B是如何调用构造函数的呢?
  3. 我很确定A是抽象的 class,但B也是抽象的 class 吗?
  1. 几乎没问题,有两件事是错误的:

    • 首先,您在B构造函数中有一个空的构造函数初始值设定项列表。 这将导致构建错误。

    • 然后在B构造函数中,语句A()创建了一个临时A object,它会立即被丢弃和销毁。 您需要从B构造函数初始化程序列表中“调用”父 class 构造函数:

       B(): A() { /* Empty */ }

      您也需要对参数化的B构造函数执行相同的操作。

  2. 您不能访问基类中的private成员,但protected是可以的。 现在protected的作品与public inheritance 一起使用:子 class 可以访问基本 class 受保护成员。

  3. 由于您使用实现B覆盖foo不是抽象的,因此B没有抽象成员。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM