在本文中,您將學(xué)習(xí)在C ++編程中使用對(duì)象和類。
C ++是一種多范式編程語言。意思是說,它支持不同的編程風(fēng)格。
解決編程問題的一種流行方法是創(chuàng)建對(duì)象,即所謂的面向?qū)ο缶幊田L(fēng)格。
C ++支持面向?qū)ο螅∣O)的編程風(fēng)格,該風(fēng)格使您可以通過創(chuàng)建對(duì)象將復(fù)雜的問題分成較小的集合。
對(duì)象只是數(shù)據(jù)的集合和作用于這些數(shù)據(jù)的函數(shù)。
在C ++中創(chuàng)建對(duì)象之前,需要定義一個(gè)類。
類是對(duì)象的藍(lán)圖。
我們可以將類視為房子的草圖(原型)。它包含有關(guān)地板,門,窗戶等的所有詳細(xì)信息。基于這些描述,我們建造了房屋。而房子就是對(duì)象。
由于可以用相同的描述制作許多房屋,因此我們可以根據(jù)一個(gè)類創(chuàng)建許多對(duì)象。
在C ++中,使用關(guān)鍵字class及其后的類名定義了一個(gè)類。
類的主體在大括號(hào)內(nèi)定義,并在末尾以分號(hào)結(jié)束。
class className { // 一些數(shù)據(jù) //一些功能 };
class Test { private: int data1; float data2; public: void function1() { data1 = 2; } float function2() { data2 = 3.5; return data2; } };
在這里,我們定義了一個(gè)名為Test的類。
此類具有兩個(gè)數(shù)據(jù)成員:data1和data2和兩個(gè)成員函數(shù):function1()和function2()。
在上面的示例中,您可能已經(jīng)注意到兩個(gè)關(guān)鍵字:private和public。
private關(guān)鍵字使數(shù)據(jù)和函數(shù)變?yōu)樗接?。只能從同一類?nèi)部訪問私有數(shù)據(jù)和函數(shù)。
public關(guān)鍵字將數(shù)據(jù)和函數(shù)公開。數(shù)據(jù)和函數(shù)可以在類之外訪問。
這里,data1和data2是私有成員,而function1()和function2()是公共成員。
如果嘗試從類外部訪問私有數(shù)據(jù),則編譯器將引發(fā)錯(cuò)誤。OOP中的此功能稱為數(shù)據(jù)隱藏。
定義類時(shí),僅定義對(duì)象的規(guī)范;沒有分配內(nèi)存或存儲(chǔ)空間。
要使用類中定義的數(shù)據(jù)和訪問函數(shù),需要?jiǎng)?chuàng)建對(duì)象。
className objectVariableName;
您可以用如下方法創(chuàng)建Test類的對(duì)象(在上面的示例中定義):
class Test { private: int data1; float data2; public: void function1() { data1 = 2; } float function2() { data2 = 3.5; return data2; } }; int main() { Test o1, o2; }
在這里,創(chuàng)建了Test類的兩個(gè)對(duì)象o1和o2。
在上面的Test類中,data1和data2是數(shù)據(jù)成員,而function1()和function2()是成員函數(shù)。
您可以使用來訪問數(shù)據(jù)成員和成員函數(shù)。(.)運(yùn)算符。例如,
o2.function1();
這將在Test類中為對(duì)象o2調(diào)用function1()函數(shù)。
同樣,可以通過以下方式訪問數(shù)據(jù)成員:
o1.data2 = 5.5;
重要的是要注意,只能從類內(nèi)部訪問私有成員。
因此,您可以使用o2.function1(); 上面示例中的任何函數(shù)或類。 但是,代碼o1.data2 = 5.5; 應(yīng)該始終在類Test中。
// 用于說明C ++編程中對(duì)象和類的工作的程序 #include <iostream> using namespace std; class Test { private: int data1; float data2; public: void insertIntegerData(int d) { data1 = d; cout << "數(shù)字: " << data1; } float insertFloatData() { cout << "\n輸入數(shù)據(jù): "; cin >> data2; return data2; } }; int main() { Test o1, o2; float secondDataOfObject2; o1.insertIntegerData(12); secondDataOfObject2 = o2.insertFloatData(); cout << "您輸入了 " << secondDataOfObject2; return 0; }
輸出結(jié)果
數(shù)字: 12 輸入數(shù)據(jù): 23.3 您輸入了 23.3
在這個(gè)程序中,在Test類中定義了兩個(gè)數(shù)據(jù)成員data1和data2,以及兩個(gè)成員函數(shù)insertIntegerData()和insertFloatData()。
聲明同一個(gè)類的兩個(gè)對(duì)象o1和o2。
使用以下方法為o1對(duì)象調(diào)用insertIntegerData()函數(shù):
o1.insertIntegerData(12);
這會(huì)將對(duì)象o1的data1值設(shè)置為12。
然后,調(diào)用對(duì)象o2的insertFloatData()函數(shù),并使用以下方法將函數(shù)的返回值存儲(chǔ)在變量secondDataOfObject2中:
secondDataOfObject2 = o2.insertFloatData();
在這個(gè)程序中,o1的data2和o2的data1沒有被使用,并且包含垃圾值。
您還應(yīng)該檢查以下主題,以了解有關(guān)對(duì)象和類的更多信息: