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