看了大部分人的回答,都是在強調建構函式初始值列表(樓主可以看看c++ primer 5th中文版第258頁,對這個問題有較深說明),一個是直接初始化資料成員,後者則先初始化再賦值。
還有
Derived_s2(string s): Base_s2(s){} //委託Base_s2()這個函式完成Derived_s2()這個函式的功能
Derived_s2(string s){ Base_s2(s); //如果把這句去掉,編譯也是沒問題的。因為父類有預設建構函式。 }
測試程式碼,編譯執行都沒問題呀:
#include <iostream>
#include <string>
using std::string;
struct Base_s2
{
public:
Base_s2()=default;
Base_s2(string s):name(s){}
private:
string name;
};
struct Derived_s2:public Base_s2
Derived_s2()=default;
Derived_s2(string s)
;
}
int main()
Derived_s2 der1;
Derived_s2 der2("hello");
return 0;
看了大部分人的回答,都是在強調建構函式初始值列表(樓主可以看看c++ primer 5th中文版第258頁,對這個問題有較深說明),一個是直接初始化資料成員,後者則先初始化再賦值。
還有
Derived_s2(string s): Base_s2(s){} //委託Base_s2()這個函式完成Derived_s2()這個函式的功能
Derived_s2(string s){ Base_s2(s); //如果把這句去掉,編譯也是沒問題的。因為父類有預設建構函式。 }
測試程式碼,編譯執行都沒問題呀:
#include <iostream>
#include <string>
using std::string;
struct Base_s2
{
public:
Base_s2()=default;
Base_s2(string s):name(s){}
private:
string name;
};
struct Derived_s2:public Base_s2
{
Derived_s2()=default;
Derived_s2(string s)
{
;
}
};
int main()
{
Derived_s2 der1;
Derived_s2 der2("hello");
return 0;
}