C Plus
bool
c語言中使用int當bool使用
bool和int 轉換
int -> bool 非0爲true , 0爲fasle
bool -> int true 爲1 false 爲0
int n = 3; bool b = n; n = b;// n = 1
const
將一個變量變成常量 , 編譯器在語法層面上對當前const修飾的變量進行檢測,當有人對其進行修改的時候,編譯器會報錯
本質上的常量是存放在常量區的常量,#define 定義的宏
具有類型的常量
編譯時分配空間 :更方便進行調試
作用域
域運算符
命名空間,代表作用域
new delete
運算符 能重載
在堆當中分配空間,
malloc 不會調用構造函數
free 不會調用析構函數
函數的重載
返回值不同不能構成重載
函數的重載與參數相關,順序不同也能重載
const修飾返回值 與重載沒有關係(const函數在類裏面修飾成員函數使用,可以構成重載)
int Foo(int num) { return num; } int Foo(float num) { return num; } int main() { Foo(1.0003); //傳遞double的數,因爲都可以向下轉換爲int 和 num,會產生二義性 //解決 指明調用的類型 Foo(static_cast<float>(1.0003)); return 0; }
引用
一旦確定就無法修改
int& Foo(int &num)//返回值爲引用,表示返回值的引用,並且生命週期不能結束 { num=100; int other = 1; return other; } //返回的是other的引用 ,other是臨時變量,值未知 int main() { int num = 1; Foo(num)=1; // num =100; return 0; }
類型轉換
c風格強制轉換(int)
inline 內聯函數
在調用的時候,直接進行展開(由編譯器決定)。相當於宏,替換的時候會進行檢測。
Object
訪問權限
公用 public
私有 private
保護 protected
類
構造函數
默認的構造函數裏面是一個空函數,什麼都沒做。在進行實例化的時候,必須調用構造函數。
默認構造,不需要傳參的 Demo(int num=0) 等同於構造函數
構造函數可以重載
構造函數初始化列表 Demo():num_(num){}
class Demo { public : Demo(int num = 0):num_(num),rnum(num),cnum(num)//初始化列表才屬於初始化 { num_ = num; rnum = num;//必須初始化引用 cnum = num;//必須初始化常量限定類型的對象 //這裏屬於賦值 } private: int num_; int &rnum;//引用 const int cnum;//const變量 必須在初始化列初始化 };
拷貝構造函數
默認的空拷貝構造函數會自動淺拷貝
Demo demo;
Demo demo1 = demo; //調用拷貝構造
Demo Foo(Demo demo) //入參 { return demo; //作爲返回值 ,也會調用拷貝構造 }
運算符重載
單目運算符重載爲成員函數
雙目運算符重載爲友元函數
. = () [] -> 無法重載爲友元函數
類型轉換運算符只能重載爲成員函數
流運算符只能以友元方式重載
class Demo { public : Demo(int num = 0):num_(num){} void Open() {} void Close() {} private: int num_; }; class MyPoint //智能指針,能夠在合適的時候進行釋放 { public: MyPoint() { demo_ = new Demo(); } MyPoint() { delete demo_; } Demo *operator->() { return demo_; } private: Demo *demo_; }; int main() { MyPoint point; point->Open(); return 0; }