-
const 修飾成員函數(shù) const 修飾的成員函數(shù)不能修改任何的成員變量 class A { public: int aaa; int funcA() const { aaa = 20; // 這行代碼會報錯 return 0; } } 代碼塊預(yù)覽復(fù)制 const 成員函數(shù)不能調(diào)用非 const 成員函數(shù) class A { public: int aaa; int funcA() const { funcB(); // 這行代碼會報錯 return 0; } int funcB() { return 0; } }查看全部
-
const 修飾指針 const 修飾指針可以分為多種情況: 只有一個 const,如果 const 位*左側(cè),表示指針所指數(shù)據(jù)是常量,不能通過解引用修改該數(shù)據(jù);指針本身是變量,可以指向其他的內(nèi)存單元 int aaa = 20; int bbb = 30; const int * constPoint = &aaa; constPoint = &bbb; *constPoint = 80; // 這行代碼會報錯 代碼塊預(yù)覽復(fù)制 只有一個 const,如果 const 位于*右側(cè),表示指針本身是常量,不能指向其他內(nèi)存地址;指針所指的數(shù)據(jù)可以通過解引用修改 int aaa = 20; int bbb = 30; int * const constPoint = &aaa; constPoint = &bbb; // 這行代碼會報錯 *constPoint = 80; 代碼塊預(yù)覽復(fù)制 兩個 const,*左右各一個,表示指針和指針所指數(shù)據(jù)都不能修改 int aaa = 20; int bbb = 30; const int * const constPoint = &aaa; constPoint = &bbb; // 這行代碼會報錯 *constPoint = 80; // 這行代碼會報錯查看全部
-
const int a = 20; 代碼塊預(yù)覽復(fù)制 則表示 a 是一個常量,你不可以在后續(xù)對其進行修改。因為 a 不可修改,所以在創(chuàng)建的時候就要對 a 進行賦值,不對其進行賦值則會報錯。例如,下面的代碼就會報錯 const int a;查看全部
-
正是由于 NULL 會導(dǎo)致這樣的混亂,所以在 C++11 標準之后,C++ 標準委員會為 C++ 添加了 nullptr 關(guān)鍵字。我們可以將 NULL 賦值給一個普通變量,而 nullptr 卻不能。 int a = nullptr; 代碼塊預(yù)覽復(fù)制 這樣是會直接報錯的。 nullptr 只能賦值給指針,所以不會有 NULL 那樣的問題。 所以,只要你的編譯器兼容 C++11 標準,那么你應(yīng)該使用 nullptr查看全部
-
因為在 C++ 中,0 地址通常是被保護起來的,不可訪問的。因此用 0 地址來指代這個指針哪里都不指,是可以的。但是這里面卻存在一些問題。因為 NULL 就是 0,所以我們可以把 NULL 用在其他地方查看全部
-
我們通過強制轉(zhuǎn)換來指定 func 執(zhí)行的是哪個。這個過程是在編譯階段就將函數(shù)實現(xiàn)和函數(shù)調(diào)用關(guān)聯(lián)起來,因此靜態(tài)聯(lián)編也叫早綁定,在編譯階段就必須了解所有的函數(shù)或模塊執(zhí)行所需要檢測的信息。 動態(tài)編聯(lián) 除了靜態(tài)編聯(lián)之外,C++ 還支持動態(tài)編聯(lián)。動態(tài)聯(lián)編是指聯(lián)編在程序運行時動態(tài)地進行,根據(jù)當時的情況來確定調(diào)用哪個同名函數(shù),實際上是在運行時虛函數(shù)的實現(xiàn)。查看全部
-
將一個指針的類型做成強轉(zhuǎn),然后調(diào)用 func 函數(shù),就會發(fā)現(xiàn), func 函數(shù)會隨著被強轉(zhuǎn)的類型的變換而變換,這種函數(shù)的關(guān)聯(lián)過程稱為編聯(lián)。按照聯(lián)編所進行的階段不同,可分為兩種不同的聯(lián)編方法:靜態(tài)聯(lián)編和動態(tài)聯(lián)編。查看全部
-
多態(tài),就是子類和父類有一個共同的函數(shù)名,但實現(xiàn)的功能不一樣,我們可以通過顯式轉(zhuǎn)換或隱士轉(zhuǎn)換來調(diào)用到不同的功能函數(shù)。子類可以直接隱式的轉(zhuǎn)換為父類,但要將父類轉(zhuǎn)換為子類實現(xiàn)的函數(shù),就要用顯式的方式來實現(xiàn)查看全部
-
我們其實可以把一個員工強行轉(zhuǎn)化成程序員,但是這就有可能出問題,就如同我們把 long long 轉(zhuǎn)成 int 就有可能出現(xiàn)問題。 int main(int argc,char **argv) { Coder * coder = new Coder(); Staff * staff = coder; // 隱式轉(zhuǎn)換就可以 Coder * coder = (Coder *)staff; // 必須顯式轉(zhuǎn)換 return 0; }查看全部
-
類之間也可以相互轉(zhuǎn)換。類的轉(zhuǎn)換主要是在父類和子類之間的轉(zhuǎn)換。查看全部
-
long long a = 100; int b = (int)a; 這里是大類型轉(zhuǎn)小類型,所以要顯式轉(zhuǎn)換。這種轉(zhuǎn)換可能會損失精度,是需要我們程序員掌控的查看全部
-
例如,我們可以把 int 轉(zhuǎn)成 long long。 int a = 100; long long b = a; 代碼塊預(yù)覽復(fù)制 由于是小類型轉(zhuǎn)大類型,所以這里使用隱式轉(zhuǎn)換就可以了。查看全部
-
int main(int argc,char **argv) { Child * obj = new Child(); Base * baseobj = (Base *)obj; baseobj->func(); delete obj; return 0; } 我們把這個 Child 指針強轉(zhuǎn)成 Base 指針,結(jié)果會是父類的func結(jié)果查看全部
-
在 C++ 中,對父類成員的權(quán)限,子類中可以進行重新的定義,這個定義就是通過繼承時候?qū)懙膒ublic 來實現(xiàn)的。 可以看到,我們在上述程序中使用了 public 修飾符,那么父類中的成員函數(shù)和成員變量將會保持父類的權(quán)限。這種是使用最廣泛的繼承方式,我們把它叫做公有繼承。查看全部
-
除了具有 Staff 的所有內(nèi)容之外,Coder 還有屬于自己的動作,那就是寫代碼,我們就可以這樣寫: class Coder : public Staff { public: void code() { printf("Coding!!!\n"); } };查看全部
舉報
0/150
提交
取消