例如:
// Example program
#include <iostream>
#include <string>
class abstract_class
{
public:
abstract_class() = default;
~abstract_class() = default;
virtual void read() = 0;
};
int main()
{
std::unique_ptr<abstract_class> x;
std::cout << "Hello, " << "!\n";
}
我認為抽象類有這些限制
抽象類不能用于:
變數或成員資料
引數型別<---------
函式回傳型別
顯式轉換型別
在上面的代碼中,我們使用抽象類作為模板引數,為什么這不是一個錯誤。
uj5u.com熱心網友回復:
首先,您在問題中提到的引數型別是用于函式呼叫引數而不是模板引數。
為什么這不是一個錯誤。
因為您正在創建一個指向抽象類物件的唯一指標,而不是抽象類本身的物件。也就是說,允許創建指向抽象型別別的指標(無論是否唯一)。
例如,只要認為您也可以撰寫以下內容而不會出現任何錯誤:
abstract_class *ptr; //this also works for the same reason
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/513357.html
下一篇:根據模板型別有條件地初始化類變數
