運算子過載概念:對已有的運算子重新進行定義,賦予其另一種功能,以適應不同的資料型別
作用:實現兩個自定義資料型別相加的運算
class person ;
person(int a, int b)
//成員函式實現 + 號運算子過載
person operator+(const person& p)
public:
int m_a;
int m_b;
};//全域性函式實現 + 號運算子過載
//person operator+(const person& p1, const person& p2)
//運算子過載 可以發生函式過載
person operator+(const person& p2, int val)
void test()
int main()
總結1:對於內建的資料型別的表示式的的運算子是不可能改變的
總結2:不要濫用運算子過載作用:可以輸出自定義資料型別
class person
//成員函式 實現不了 p << cout 不是我們想要的效果
//void operator<<(person& p)
private:
int m_a;
int m_b;
};//全域性函式實現左移過載
//ostream物件只能有乙個
ostream& operator<<(ostream& out, person& p)
void test()
int main()
總結:過載左移運算子配合友元可以實現輸出自定義資料型別作用: 通過過載遞增運算子,實現自己的整型資料
class myinteger
//前置++
myinteger& operator++()
//後置++
myinteger operator++(int)
private:
int m_num;
};ostream& operator<<(ostream& out, myinteger myint)
//前置++ 先++ 再返回
void test01()
//後置++ 先返回 再++
void test02()
int main()
總結: 前置遞增返回引用,後置遞增返回值c++編譯器至少給乙個類新增4個函式
預設建構函式(無參,函式體為空)
預設析構函式(無參,函式體為空)
預設拷貝建構函式,對屬性進行值拷貝
賦值運算子 operator=, 對屬性進行值拷貝
如果類中有屬性指向堆區,做賦值操作時也會出現深淺拷貝問題
示例:
class person
//過載賦值運算子
person& operator=(person &p)
//編譯器提供的**是淺拷貝
//m_age = p.m_age;
//提供深拷貝 解決淺拷貝的問題
m_age = new int(*p.m_age);
//返回自身
return *this;
} ~person() }
//年齡的指標
int *m_age;
};void test01()
int main()
作用:過載關係運算子,可以讓兩個自定義型別物件進行對比操作
示例:
class person
; bool operator==(person & p)
else
}bool operator!=(person & p)
else
}string m_name;
int m_age;
};void test01()
else
if (a != b)
else }
int main()
示例:
class myprint
};void test01()
class myadd
};void test02()
int main()
第四講 運算子
運算子的概念 運算子 於執 程式 運算,會針對 個以上運算元項 來進 運算。例如 2 3,其運算元是2和3,而運算子則是 運算子的分類 算術運算子 賦值運算子 較運算子 關係運算子 邏輯運算子 條件運算子 三元運算子 加法運算子 表現形式 減法運算子 表現形式 乘法運算子 表現形式 除法運算子 表現...
C 研發 核心篇 第四講 4 7 多型
4.7.1 多型的基本概念 多型是c 物件導向三大特性之一 多型分為兩類 靜態多型和動態多型區別 下面通過案例進行講解多型 class animal class cat public animal class dog public animal 我們希望傳入什麼物件,那麼就呼叫什麼物件的函式 如果函...
python入門第四講 比較運算子
比較運算子包括 建立乙個檔名為num.py的文件 1 print 請輸入三個數字 2 num1 int input num1 3 num2 int input num2 4 num3 int input num3 5 max num 0 6if num1 num2 若num1 num2 7 max ...