#include <iostream>
using namespace std;
class Counter
{
protected:
unsigned int count;
public:
Counter() : count(0) {cout << "\nCounter Default Constructor";}
Counter(int i) : count (i) {cout << "\nCounter Argument Constructor";}
unsigned int getData()
{
return count;
}
Counter operator ++() // increment (prefix)
{
++count;
return Counter(count);
}
};
class inCounter : public Counter
{
public:
inCounter() : Counter() { cout << "\ninCounter Default Constructor"; }
inCounter(int c) : Counter (c) {cout << "\ninCounter Argument Constructor";}
Counter operator --()
{
--count;
return Counter (count) ;
}
};
void main()
{
inCounter c1(10); }
時不叫兩聲基類的構造我期待的輸出爲:使用初始化列表
計數器參數的構造函數
inCounter參數的構造函數
計數器參數的構造函數
但它出來是
計數器參數的構造函數
inCounter參數的構造函數
爲什麼會這樣呢?
我期待第一個輸出的原因是,在創建對象c1
期間,首先調用基類構造函數,因此打印了"Counter Argument Constructor"
。然後,調用派生類的構造函數,因此打印"inCounter Argument Constructor"
。但派生類構造函數再次調用Counter
構造函數。所以,"Counter Argument Constructor"
應該再次打印。
爲什麼你希望'反駁Constructor'出現兩次? – timrau
爲什麼你會期望Conter類的構造函數運行兩次? – tebe
你應該解釋爲什麼你期望三個構造函數調用。否則,你的問題就是「爲什麼3 + 3等於6,如果我期待7?」的話。 – juanchopanza