🏷? 標簽:C++、面向對象、類、構造函數、成員函數、封裝、繼承、多態
📅 更新時間:2025年6月15日
💬 歡迎在評論區留言交流你的理解與疑問!
文章目錄
- 前言
- 一、什么是類?
- 二、類的定義
- 1.基本語法
- 2.示例
- 1.學生類
- 2.詳解構造函數
- 3.實例化對象
- 三、訪問權限 public / private / protected
- 1.各類權限含義
- 2.示例
- 四、構造函數
- 1.類型
- 2.示例
- 五、析構函數
- 1.語法
- 2.示例:
- 六、類的友元
- 1.什么是友元
- 2.示例
- 3.友元函數
- 1.語法
- 2.示例
- 總結
前言
C++ 入門老是繞不過類與對象?構造函數是什么?成員函數怎么寫?訪問權限有啥用?
今天我們就來學習一下c++中的類
一、什么是類?
在 C++ 中,類(Class)是一種用戶自定義的數據類型,用于將數據和行為封裝在一起
類是模板,對象是實例
就像學生是一種類型,而“張三”“李四”是一個個對象
二、類的定義
1.基本語法
class 類名 {//訪問權限!!!!!!!!
private/public/protected: // 構造函數// 成員函數private/public/protected:// 成員變量};
2.示例
1.學生類
我們創建一個表示學生的類
#include <iostream>
using namespace std;class Student {public://構造函數Student(string n, int a) {name = n;age = a;}//成員函數void introduce() {cout << "我是 " << name << ",今年 " << age << " 歲。" << endl;}//私有變量
private:string name;int age;};
2.詳解構造函數
構造函數是一個特殊的成員函數,當對象被創建時自動調用,常用于初始化成員變量
要求:
名稱必須與類名相同
沒有返回值
Student(string n, int a) {name = n;age = a;
}
同樣初始化我們可以通過初始化列表的方式進行初始化
Student(string n, int a):name(n),age(a) {// 構造函數體可留空,推薦用初始化列表初始化成員變量
}
我們還能用this
指針來初始化
在成員函數中,this
是一個指向當前對象本身的指針
Student(string n, int a) {this->name = n;this->age = a;
}
3.實例化對象
我們可以在主函數中創建一個實例對象,然后調用其中的成員函數
int main()
{Student s1("小明",20);s1.introduce();return 0;
}輸出:
我是 小明,今年 20 歲。
三、訪問權限 public / private / protected
1.各類權限含義
public
:公有成員,可以被所有代碼訪問。
private
:私有成員,僅能被類的成員函數和友元訪問。
protected
:受保護成員,僅能被類的成員函數、友元和派生類訪問。
默認是
private
,推薦顯式寫出訪問權限,增強可讀性
2.示例
我們還是拿前面的學生類來舉例,我們在構造函數中對于成員變量和成員函數我們都用public
,這樣我們就能在類外訪問
到了
正確示范:
#include<iostream>
using namespace std;class Student
{public:Student(string n, int a) {name = n;age = a;}void introduce() {cout << "我是 " << name << ",今年 " << age << " 歲。" << endl;}public:string name;int age;};
int main()
{Student s1("小明",20);s1.introduce();cout<<"年齡:"<<s1.age<<endl;cout<<"名字:"<<s1.name<<endl;return 0;
}
輸出:
我是 小明,今年 20 歲。
年齡:20
名字:小明
錯誤示范:
private://改為私有string name;int age;
此時會報錯
a.cpp:27:24: error: ‘int Student::age’ is private within this context27 | cout<<"年齡:"<<s1.age<<endl;| ^~~
a.cpp:20:13: note: declared private here20 | int age;| ^~~
a.cpp:28:24: error: ‘std::string Student::name’ is private within this context28 | cout<<"名字:"<<s1.name<<endl;| ^~~~
a.cpp:19:16: note: declared private here19 | string name;| ^~~~
因為類外不可以訪問!
四、構造函數
1.類型
默認構造函數:沒有參數的構造函數。
參數化構造函數:接受參數以初始化對象。
拷貝構造函數:用一個對象初始化另一個對象。
移動構造函數(C++11):從臨時對象“移動”資源
2.示例
#include<iostream>
using namespace std;class Student
{public:Student(string n, int a) {name = n;age = a;cout<<"參數化構造函數"<<endl;}Student(){name="小明";age=10;cout<<"默認構造函數"<<endl;}Student(const Student &other){name=other.name;age=other.age;cout<<"拷貝構造函數"<<endl;}Student(Student&& other){name=other.name;age=other.age;cout<<"移動構造函數"<<endl;}private:string name;int age;};
int main()
{Student s1;Student s2("小明",20);Student s3=s2;Student s4=move(s3);return 0;
}
輸出:
默認構造函數
參數化構造函數
拷貝構造函數
移動構造函數
五、析構函數
析構函數(Destructor):在對象生命周期結束時調用,用于釋放資源
1.語法
~ 類名 ()
{
}
2.示例:
#include<iostream>
using namespace std;class Student
{public:Student(string n, int a) {name = n;age = a;p=new int(age);//手動開辟 在堆上}~Student(){delete p;//手動開辟必須手動釋放}private:string name;int age;int* p;};
六、類的友元
1.什么是友元
友元(Friend):可以訪問類的私有
和保護成員
的非成員函數或另一個類
2.示例
#include<iostream>
using namespace std;class Student
{public:Student(string n, int a) {name = n;age = a;}~Student(){}private:string name;int age;friend class teacher;//關鍵聲明!!!!!!!!!!!!void play(){cout<<"hi"<<endl;}
};class teacher
{public:teacher(string name,int age){this->name=name;this->age=age;}~teacher(){}void f( Student& a){a.play();//直接訪問私有成員函數}private:string name;int age;
};int main()
{teacher s1("小明",20);Student s2("小明",20);s1.f(s2);return 0;
}輸出:hi
如果沒有聲明
friend class teacher;
那么在teacher的成員函數中這樣直接訪問是錯誤的
void f(Student& a){a.play();//直接訪問私有成員函數}
3.友元函數
友元函數: 單個函數可以被聲明為友元
這樣我們可以在函數內訪問私有變量
1.語法
friend 函數()
{}
然后函數如果要在類外實現的話
不需要
void 類:: 函數名(){}
因為友元函數并不是類的成員函數
2.示例
#include<iostream>
using namespace std;class Student
{public:Student(string n, int a) {name = n;age = a;}~Student(){}friend void play(Student& a) ;//聲明友元函數private:string name;int age;
};void play(Student& a)//類外實現友元函數
{cout<<a.name<<endl;//調用私有變量
}int main()
{Student s2("小明",20);play(s2);return 0;
}
輸出:小明
總結
類(Class)是 C++ 中封裝數據和行為的基本單位,是面向對象編程
的核心概念。
對象是類的實例,通過構造函數進行初始化,支持默認構造、參數構造、拷貝構造和移動構造。
訪問權限決定了類成員的訪問范圍:public(公有)、private(私有)、protected(保護),良好的封裝性是面向對象設計的重要原則。
構造函數負責初始化對象,析構函數負責資源釋放,兩者構成對象生命周期管理的基礎。
友元(函數或類) 是類提供的一種特殊機制,允許非成員函數或其他類訪問私有和保護成員
友元函數不是類的成員函數,定義時不需要加類名作用域限定符
如果你覺得本文對你有幫助,不妨點贊 + 收藏 + 關注,更多 C++ 系列教程將持續更新 🔥!