首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >无数据成员的c++中派生类的问题

无数据成员的c++中派生类的问题
EN

Stack Overflow用户
提问于 2019-11-22 07:56:10
回答 1查看 556关注 0票数 0

我正在学习c++继承,并在下面的练习中遇到问题,以创建具有特定需求的基类A和派生类B。我的答案写在下面,但似乎有一些问题。在这篇文章的结尾,我还有几个问题要问。

代码语言:javascript
运行
复制
class A {
    private:
        int x;
    protected:
        A (): x(0) { } 
        A (int n): x(n) { }
        int get() const {return x;}
    public:
        virtual void foo() = 0;
};

代码语言:javascript
运行
复制
class B : public A {
    public:
        B (): { A(); }
        B (int n): { A(n); }
        virtual void foo() { std::cout << get();}
};

我的问题是:

我确信我的代码写得不正确,但是谁能告诉我incorrect?

  • Since xA中是私有的,B就不能继承那个数据成员了。那么B如何能够调用构造函数呢?

  • --我确信A是一个抽象类,但B也是一个抽象类吗?
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-11-22 08:01:24

  1. 几乎没问题,有两件事是不对的:

代码语言:javascript
运行
复制
- First you have an empty constructor initializer list in the `B` constructors. That will lead to build errors.
- Then in the `B` constructor the statement `A()` creates a temporary `A` object, which is promptly discarded and destructed. You need to "call" the parent class constructor from the `B` constructor initializer list:

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

您也打算对参数化的B构造函数执行同样的操作。

  1. 您不能访问基类中的private成员,但是protected是可以的。这就是现在使用members.
  2. Since继承的protected:子类可以访问基类保护的protected,您用一个实现覆盖fooB不是抽象的,没有public的抽象成员
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/58989828

复制
相关文章

相似问题

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