[英]Problem with derived class in c++ with no data member
我正在学习 c++ inheritance 并面临以下练习的问题,以创建基础 class A 和派生的 ZA2F2ED4F8DCEBC2CBBDZC21A21A2 具有某些要求。 我的答案写在下面,但似乎存在一些问题。 在这篇文章的最后,我还有几个问题。
class A {
private:
int x;
protected:
A (): x(0) { }
A (int n): x(n) { }
int get() const {return x;}
public:
virtual void foo() = 0;
};
class B : public A {
public:
B (): { A(); }
B (int n): { A(n); }
virtual void foo() { std::cout << get();}
};
我的问题是:
x
在A
中是私有的,因此B
将无法继承该数据成员。 那么B
是如何调用构造函数的呢?A
是抽象的 class,但B
也是抽象的 class 吗?几乎没问题,有两件事是错误的:
首先,您在B
构造函数中有一个空的构造函数初始值设定项列表。 这将导致构建错误。
然后在B
构造函数中,语句A()
创建了一个临时A
object,它会立即被丢弃和销毁。 您需要从B
构造函数初始化程序列表中“调用”父 class 构造函数:
B(): A() { /* Empty */ }
您也需要对参数化的B
构造函数执行相同的操作。
您不能访问基类中的private
成员,但protected
是可以的。 现在protected
的作品与public
inheritance 一起使用:子 class 可以访问基本 class 受保护成员。
由于您使用实现B
覆盖foo
不是抽象的,因此B
没有抽象成员。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.