簡體   English   中英

在構造函數繼承中使用默認構造函數

[英]using default constructor in constructor inheritance

我有一個模板類“ Derived”,它可以進行構造函數繼承:

template <class T>
class Derived : public T
{
    using T::T;
    Derived()
    {
         std::cout<<"in derived"; 
    }
};

我的基類有一個需要參數的構造函數:

class Base
{
public:
    Base(int a)
    {
        std::cout<<"in base";
    }
};

當我創建派生類型的對象時,派生構造函數似乎沒有被調用:

Derived<Base> derived(2);

打印“基礎”;

為什么? 有沒有辦法告訴它調用派生構造函數?

繼承的構造函數進行的初始化如下:

[class.inhctor.init] (強調我的)

1當調用類型B的構造函數初始化不同類型D的對象時(即,繼承該構造函數時), 初始化將繼續進行,就好像使用默認的默認構造函數來初始化D對象和來自該對象的每個基類子對象一樣構造函數是繼承的,除了B子對象是通過調用繼承的構造函數初始化的 完整的初始化被認為是單個函數調用。 特別是,在初始化D對象的任何部分之前,先對繼承的構造函數的參數進行初始化。

關鍵是默認單詞。 默認的c'tor由編譯器生成,例如,副本c'tor可以默認。 因此,它不使用派生類中定義的任何c'tor。 編譯器生成的c'tor總是會有一個空的復合語句。 因此,不應期望會打印任何內容。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM