2013-06-03 64 views
1

同時打字下來無數次的代碼片段,我有一個閃過的洞察力這我不知道是完全正確的,並在這裏,因此我的問題在C++中的繼承機制一個奇怪的初始化列表形式?

守則

template <class T> class ListNode:public Node { 

public: 
    T_val; 
    ListNode (T val); 

} 

問題

class ListNode : public Nodeclass ListNode : public Node是一種初始化器列表,它將對象的公共部分初始化爲父對象的公共部分?

回答

3

不,不是。對象的初始化發生在構造函數中,而不是在類定義期間。這只是簡單的繼承,這個概念僅適用於類,而不適用於對象。類只在編譯時存在,而不是在運行時存在,所以不能進行初始化。定義繼承的語法使用冒號:以及在構造函數中定義初始化列表的語法並不意味着存在一個核心。它只是在兩種情況下使用相同的字符,以避免混淆,至少通常是這樣;-)

這種多用途在C++中發生了很多。例如。考慮在功能聲明/定義和功能調用中使用的對()。或花括號的對{}至極用於定義範圍塊(命名空間,類,函數,下面功能水平範圍)和初始化對象(在均勻的初始化在C++ 11,集合初始化C++ 98/03)。其他示例是&(「地址」和「二進制和」運算符與參考聲明),deletedelete運算符和operator delete對比刪除的函數)和<等(模板對比運算符)