[小小測試] C/C++ 與 Java、struct 與 class 用法比較
相信看到這邊,大家都有點累了(你不累我累阿~),所以我們再來玩個實驗就收一收吧!
其實我我們在先前驗證 C++ 的 struct 中的元素到底是不是 public 時,刻意使用了 main() 來作實驗,這一點沒有錯,因為若 main() 可以存取的話,就直接代表它是 public 沒錯;但問題就出在 class 的部份,因為 main() 不能存取就說他是 private 實在有點不合理,所以阿~在這一段一段,我們要來玩一點 Minecraft 繼承
class CClass { int CClassInt=1; };
▲ 首先,先寫一個 Class 叫 CClass
class CClass2 : CClass { public: int returnCClassInt() { return CClassInt; } };
▲ 再來,寫一個 Class 叫 CClass2 並繼承 CClass, CClass,其中有一個 method 叫returnCClassInt(),為了避免出錯,宣告為 public
CClass2 ccl1; cout << "CClassInt=" << ccl1.CClassInt() << '\n';
▲ 在主程式中嘗試存取(完整程式碼)
|7|warning: non-static data member initializers only available with -std=c++11 or -std=gnu++11 [enabled by default]| ||In member function ‘int CClass2::returnCClassInt()’:| |7|error: ‘int CClass::CClassInt’ is private| |15|error: within this context| ||In function ‘int main()’:| |7|error: ‘int CClass::CClassInt’ is private| |23|error: within this context| |23|error: expression cannot be used as a function| ||=== Build failed: 5 error(s), 1 warning(s) (0 minute(s), 0 second(s)) ===|
▲ 編譯器輸出
從編譯器輸出之中,我們可以很明顯的看到 “ ‘int CClass::CClassInt’ is private ” 這段文字,沒錯,編譯器 因為我們很煩 直接說了,它(CClassInt)(CClassInt)是 private 變數!
後記:
其實下面這條錯誤訊息是因為小獅我偷懶沒從主程式初始化才會這樣的(因為非靜態資料成員(non-static data member)在 C++11 之後才能直接初始化)
|7|warning: non-static data member initializers only available with -std=c++11 or -std=gnu++11 [enabled by default]|
下一頁有一些小技巧喔!
Ya~ Facebook 登入成功!