在c++中,具備物件導向的三大特性為:封裝、繼承、多型,也就是說,c++認為萬物皆為物件。
那麼其中最有代表性的就是c++中的類。在c++類中,有三種不同的訪問許可權,公共許可權,保護許可權,私有許可權。
公共許可權 public 類內可以訪問 類外可以訪問並且在進行類的繼承中,不同情況又有不同的許可權:保護許可權 protected 類內可以訪問 類外不可以訪問
私有許可權 private 類內可以訪問 類外不可以訪問
當進行公有繼承時,可以訪問基類的public物件,protected物件,而不能訪問private物件。
當進行保護繼承時,可以訪問基類的public物件,protected物件,但是兩者都變成protected許可權,一樣的,無法訪問private物件。
當進行私有繼承時,可以訪問基類的public物件,protected物件,但是兩者都變成private許可權,但是一樣無法訪問private物件。
而與class很像,但又有些許不同的結構體,它們的區別在於,結構體預設許可權為公有,而class中預設許可權為私有。
那麼,我們為什麼要將類中的成員分為這幾種許可權呢?
一是因為將成員屬性設定為私有,我們就可以自己控制讀寫許可權;其次是對於寫許可權,我們可以檢測資料的有效性。
在處理物件的時候,物件的初始化以及銷毀是兩個很重要的問題。如果乙個物件沒有進行初始化或者沒有及時清理,都會造成一定的安全問題。
c++中就利用建構函式以及析構函式解決以上兩個問題。這兩個函式將會被編譯器自動呼叫,完成物件初始化和清理工作。
不過,即使我們自己不編寫建構函式以及析構函式,編譯器自身也會給我們提供。
1.建構函式沒有返回值,也不寫void2.函式名稱要與類名一致
3.建構函式可以有引數,因此可以發生過載
4.程式在呼叫物件的時候會自動呼叫建構函式,並且只會呼叫一次,因此不需要我們手動呼叫
和建構函式一樣,析構函式沒有返回值也不寫void函式名稱與類名相同,在名稱前加上符號 ~
但是析構函式不可以有引數,因此不可以發生過載
程式在物件銷毀前會自動呼叫析構,無須手動呼叫,而且只會呼叫一次
class
person
//有參建構函式
person
(int a)
//拷貝建構函式
person
(const person& p)
//析構函式
~person()
public
:int age;
};
初始化列表
當我們需要給建構函式初始化列表的時候,可以根據建構函式():屬性1(值1),屬性2(值2)…來進行初始化列表
class
person
//初始化列表方式初始化
person
(int a,
int b,
int c)
:m_a
(a),
m_b(b)
,m_c
(c)void
printperson()
private
:int m_a;
int m_b;
int m_c;
};
c 入門學習 類
1.類 1.1 類的一些概念 1 c 中類與結構的區別是 類定義中成員預設情況是private,而結構中是public的 2 c 中的結構也可以有成員函式的 3 前面可以沒有類名,表示全域性資料或者全域性函式,在類中呼叫非成員函式要使用 號 前可以有兩種型別的名稱,一種是命名空間的名稱,一種是類的名...
C 類入門3 巢狀類
可以將類b宣告在另乙個類中。在另乙個類a中宣告的類b被稱為巢狀類 nested class 類a的成員函式可以建立和使用巢狀類b的物件。當且僅當宣告為公有部分時,才能在類a的外面使用巢狀類。而且必須使用作用域解析運算子。舊版c 不支援巢狀類概念 對類進行巢狀和包含並不同。包含意味著將類c物件作為類a...
c 類與物件入門
c語言是面向過程的,關注的是過程,分析出求解問題的步驟,通過步驟解決問題 c 物件導向,關注的是物件,將一件事情拆分成不同物件,靠物件之間的互動完成 類的定義 class classname class為定義類的關鍵字,classname為類的名字,中為類的主體,類中的元素為類的成員,類中的資料為類...