簡體   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