[英]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.