話不多說,我們直接進入主題:
物件:客觀世界裡的一切事物都可以看作是乙個物件,每乙個物件應當具有屬性(靜態特徵,比如乙個班級,乙個專業,乙個教室)和行為(動態特徵,例如:學習,開會,體育比賽等)兩個要素。 物件是由一組屬性和一組行為構成的。
類(class):就是物件的型別,代表了某一批物件的共同特性和特徵。類是物件的抽象,而物件是類的具體例項。
2.1 類的引入
在c語言中我們定義乙個結構體是這樣定義的:
struct student
;int main()
我們都知道,在c中,「資料」和「處理資料的操作(函式)」是分開的,語言本身並沒有支援「資料和函式」之間的關聯性。那麼,如果我們要在某種特定情況下讓資料和函式有一定的關聯,這個時候我們應該怎麼處理呢?
先看乙個例子:
很明顯,編譯器報錯了,還很多。也就是說在c語言當中是不允許在結構體中定義函式的,那麼在c++中是不是也是這樣呢?
通過對比,我們明顯的發現c++是可以做到我們想要將資料和函式產生一定關係的操作的。
為了區別c語言中iyochd結構體的定義struct,在c++中我們常用class來代替struct。
2.2 類的定義
#include
using namespace std;
class student
;int main()
class是c++中定義類的關鍵字,student為類的名字,{}中為類的主體,和結構體類似,在{}後面跟的是;。類中的元素稱為類的成員,類中的資料稱為類的屬性或者類的成員變數,類中的函式稱為類的成員函式。
類的定義通常有兩種方式:
1、將類的宣告和定義都放在類體中za
2、將類的宣告放在.h標頭檔案中,定義放在.cpp檔案中
在**中我們看到了private 和 public兩個沒有見過的東西,接下來我們講一講c++的三大特性:繼承 封裝 多型
封裝:隱藏物件的屬性和現實細節,僅對外公開介面和物件進行互動,將資料和運算元據的方法有機結合。
這裡的public 和 private是c++中的訪問限定符,訪問限定符有三個:public (公有) protected(保護) private(私有)。在下面的博文中我們會用到這些限定符,具體情況後續文章再作介紹,這裡讀者只需了解就可。
這裡做一些說明:
1、public成員在類外可以直接訪問
2、protected和private成員在類外不能夠直接訪問,在這裡我們簡單的把他們看成一樣的。(二者區別就是基類private成員在派生類中是不能被訪問的,如果基類成員不想再類外被訪問,但需要在派生類中能訪問,就定義為protected,後面博文更到派生類時我們會再來把這兩個東西拿出來再講一講)
3、他們的作用域從該訪問限定符出現的位置開始直到下乙個訪問限定符出現截止
4、class的預設訪問許可權是private,而struct預設訪問許可權是public(因為struct要相容c的特點)
那麼我們如何在類外訪問乙個類中的私有成員變數呢?(面試題)
方法一:在類中新增乙個共有的方法
我們可以看到在public中定義的公有程式設計客棧函式可以在類外訪問私有成員變數,這是訪問的一種方法。
類的作用域
在c語言階段我們知道變數的作用域只有區域性域和全域性域兩種,而在c++作用域則分為了區域性域、全域性域、命名空間域和類域四種,前面幾種域相信我們都已將熟悉過,這裡我講一下類域。
類定義了乙個新的作用域,類的所有成員都必須處在類的作用域中。形參表和函式體處於類的作用域中。在類體外定義成員,需要用 :: 作用域解析符指明成員屬於哪乙個類域。在類的作用域外,只能通過物件(或指標)借助成員訪問操作符 . 和->來訪問類成員,跟在訪問操作符後面的名字必須在相關聯的類的作用域中。
下面我們看看在**中如何實現上述的意思:
#define _crt_secure_no_warnings 1
#include
using namespace std;
namespace n1 //命名空間域
int a = 20; //全域性域
void funtest()
class test
void printa()
void printinfo()
private:
char _name[20];
char _gender[3];
int _age;
};int main()
既然乙個類有那麼多成員和程式設計客棧不同的物件,那麼它到底是怎麼來儲存的呢?
下面給出三種假設:
假設一假設二:
那就剩最後一種假設了:
顯然。這種假設才是成立的。
提乙個問題:c++是怎麼計算乙個類的大小的?
我們在程式中驗證一下:
class a1
void f2()
{}}; class a2
private:
int a = 10;
};class a3
{};int main()
可以看到在有成員變數的時候得到的值是4,而乙個空類和只有成員函式的時候它的值是1,難道是成員函式的大小?
顯然是不對的,前面我們說過,成員函式是不佔大小的,因此我們可以得出結論:乙個類的大小,實際上就是該類中非靜態成員變數之和,當然也要注意記憶體對齊,空類大小值為一(在linux和vs下面是 1)
為什麼是一呢?
就是為了區分不同的物件,設計 1 是為了 節省空間
本文標題: c++ 類和物件總結
本文位址:
C 類和物件學習總結
1 什麼是類?物件導向系統由一組互動的物件構成,每個物件有自己的屬性和行為,物件所屬的型別成為類,類是對一組具有相同屬性和行為物件的抽象。類的基本思想是資料抽象和封裝。類可以具有資料成員,也可以具有成員函式。結構體內的函式被稱為成員函式,結構體中的資料則稱為資料成員。這樣的結構體就是類,這種結構體型...
C 類和物件 類和物件
c 中物件的型別稱為類,類代表了某一批物件的共性和特徵,類是物件的抽象,而物件是類的具體例項,類是抽象的,不占用記憶體,而物件是具體的,占用 儲存空間,這點很重要,讀者需要牢記。類是使用者自己指定的型別,如果程式中要用到類型別,必須自己根據需要進行宣告,或者使用別人已設計好的類,c 標準本身並不提供...
類和物件總結
size medium b 一 基本概念 b size b 類 b 生活中把具有相似特徵和行為的事物分為一類。程式中的類就是乙個模型,為物件的建立做準備。類中包括屬性和方法 屬性 事物的特徵,如顏色 名字 大小等 方法 事物的行為,如名字的獲取 學習行為 pk行為等。b 物件 b 類中某個具體的事物...