C++总结篇(2)类和对象
1、類
1.1類的定義:
C++是一門面向對象的語言,便就引入了類的概念,類在一定程度上與C語言中的結構體很相似。Class為定義類的關鍵字,如下示例:
類不僅可以用class來定義,還可以用struct定義,因為C++完全包含C語言,二者不同的是,再類中沒有訪問限定時,class默認private訪問方式,struct默認public訪問方式。
1.2類的使用:
類的成員都在類的作用域中,在外部無法直接調用,需要使用作用域解析符,示例如下:
1.3類的大小:
類與結構體一樣,都有大小,即所有成員大小之和,但仍遵守內存對齊原則,空類的大小為1個字節。內存對齊規則如下:
1.4類的訪問方式:
private(私有):在類外不能調用
public(公有:可在類外調用
proteted(保護):在類外不能調用
訪問權限作用域從該訪問限定符出現的位置開始直到下一個訪問限定符出現時為止
2、this指針
2.1作用:
如果一個類定義了很多個對象,在調用某個對象中的成員函數來訪問某一變量時,都是通過指針來訪問的,編譯器自動給成員函數添加了一個指針參數,這個指針便是this指針,其指向需要訪問的變量。
2.2this指針特性:
3、構造函數
3.1概念
構造函數是一個特殊的成員函數,名字與類名相同,創建類類型對象時由編譯器自動調用,保證每個數據成員 都有 一個合適的初始值,并且在對象的生命周期內只調用一次。
3.2 特性:
3.3 示例:
class A { public:A(int x, int y){a = x;b = y;}void print(){cout << a << " " << " " << b << endl;} private:int a;int b; }; int main() {A a(1,2);a.print();system("pause");return 0; }4、析構函數
4.1 概念:
與構造函數功能相反,析構函數不是完成對象的銷毀,局部對象銷毀工作是由編譯器完成的。而 對象在銷毀時會自動調用析構函數,完成類的一些資源清理工作。析構函數也是特殊的成員函數。
4.2 特性:
4.3 示例:
class A { public:A(int x, int y){a = x;b = y;ptr = (int *)malloc(sizeof(int));}~A(){if (ptr){free(ptr);ptr = nullptr;}a = 0;b = 0;} private:int a;int b;int *ptr; };5、拷貝構造函數
5.1概念:
只有單個形參,該形參是對本類類型對象的引用(一般常用const修飾),在用已存在的類類型對象 創建新對象時由編譯器自動調用。
5.2 特性:
拷貝構造函數是構造函數的一個重載形式。拷貝構造函數的參數
只有一個且必須使用引用傳參,使用傳值方式會引發無窮遞歸調用。
5.3 示例:
6、賦值運算符重載
6.1 概念:
C++為了增強代碼的可讀性引入了運算符重載,運算符重載是具有特殊函數名的函數,也具有其返回值類 型,函數名字以及參數列表,其返回值類型與參數列表與普通的函數類似。函數名字為:關鍵字operator后面接需要重載的運算符符號。
6.2規則:
6.3 示例:
class A { public:A(int x, int y){a = x;b = y;ptr = (int *)malloc(sizeof(int));}bool operator==(const A &d1){return (d1.a == a&&d1.b == b);} private:int a;int b;int *ptr; };7、友元函數
7.1 概念:
友元函數可以直接訪問類的私有成員,它是定義在類外部的普通函數,不屬于任何類,但需要在類的內部聲 明,聲明時需要加friend關鍵字。
7.2 特性:
友元函數可訪問類的私有成員,但不是類的成員函數
友元函數不能用const修飾
友元函數可以在類定義的任何地方聲明,不受類訪問限定符限制
一個函數可以是多個類的友元函數
友元函數的調用與普通函數的調用和原理相同
7.3 示例:
8、友元類
8.1 概念:
友元類的所有成員函數都可以是另一個類的友元函數,都可以訪問另一個類中的非公有成員。
8.2 特性:
總結
以上是生活随笔為你收集整理的C++总结篇(2)类和对象的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: [PyQt5]点击主窗口弹出另一个窗口
- 下一篇: QT5获取运行程序的工作目录与程序所在的