C++類和對(duì)象是什么?C++類和對(duì)象詳解
C++ 是一門面向?qū)ο蟮木幊陶Z言,理解 C++,首先要理解類(Class)和對(duì)象(Object)這兩個(gè)概念。下面和小編一起來學(xué)習(xí)吧...
C++ 是一門面向?qū)ο蟮木幊陶Z言,理解 C++,首先要理解類(Class)和對(duì)象(Object)這兩個(gè)概念。下面和小編一起來學(xué)習(xí)吧
1、C++ 中的類
C++ 中的類(Class)可以看做C語言中結(jié)構(gòu)體(Struct)的升級(jí)版。結(jié)構(gòu)體是一種構(gòu)造類型,可以包含若干成員變量,每個(gè)成員變量的類型可以不同;可以通過結(jié)構(gòu)體來定義結(jié)構(gòu)體變量,每個(gè)變量擁有相同的性質(zhì)。
例如:
#include <stdio.h>
//定義結(jié)構(gòu)體 Student
struct
Student{
//結(jié)構(gòu)體包含的成員變量
char
*name;
int
age;
float
score;
};
//顯示結(jié)構(gòu)體的成員變量
void
display(
struct
Student stu){
printf
(
"%s的年齡是 %d,成績(jī)是 %f\n"
, stu.name, stu.age, stu.score);
}
int
main(){
struct
Student stu1;
//為結(jié)構(gòu)體的成員變量賦值
stu1.name =
"小明"
;
stu1.age = 15;
stu1.score = 92.5;
//調(diào)用函數(shù)
display(stu1);
return
0;
}
運(yùn)行結(jié)果:
小明的年齡是 15,成績(jī)是 92.500000
C++ 中的類也是一種構(gòu)造類型,但是進(jìn)行了一些擴(kuò)展,類的成員不但可以是變量,還可以是函數(shù);通過類定義出來的變量也有特定的稱呼,叫做“對(duì)象”。
例如:
#include <stdio.h>
//通過class關(guān)鍵字類定義類
class
Student{
public
:
//類包含的變量
char
*name;
int
age;
float
score;
//類包含的函數(shù)
void
say(){
printf
(
"%s的年齡是 %d,成績(jī)是 %f\n"
, name, age, score);
}
};
int
main(){
//通過類來定義變量,即創(chuàng)建對(duì)象
class
Student stu1;
//也可以省略關(guān)鍵字class
//為類的成員變量賦值
stu1.name =
"小明"
;
stu1.age = 15;
stu1.score = 92.5f;
//調(diào)用類的成員函數(shù)
stu1.say();
return
0;
}
運(yùn)行結(jié)果與上例相同。
對(duì)于熟悉 C++ 的讀者,這段代碼并不規(guī)范,請(qǐng)忽略這一細(xì)節(jié),本節(jié)的重點(diǎn)是引入類和對(duì)象的概念。這套 C++ 教程是在C的基礎(chǔ)上編寫的,我并不希望一開始就提出過多的 C++ 概念,讓讀者吃不消,我希望讀者從C逐漸過渡到 C++,從第二章開始編寫規(guī)范的 C++ 代碼。也就是說,包括本節(jié)在內(nèi),第一章有很多不規(guī)范的 C++ 代碼,再次請(qǐng)熟悉 C++ 的讀者忽略。
class
和 public
都是 C++ 中的關(guān)鍵字,初學(xué)者請(qǐng)先忽略 public
(后續(xù)會(huì)深入講解),把注意力集中在 class 上。
C語言中的 struct 只能包含變量,而 C++ 中的 class 除了可以包含變量,還可以包含函數(shù)。display()
是用來處理成員變量的函數(shù),在C語言中,我們將它放在了 struct Student
外面,它和成員變量是分離的;而在 C++ 中,我們將它放在了 class Student
內(nèi)部,使它和成員變量聚集在一起,看起來更像一個(gè)整體。
結(jié)構(gòu)體和類都可以看做一種由用戶自己定義的復(fù)雜數(shù)據(jù)類型,在C語言中可以通過結(jié)構(gòu)體名來定義變量,在 C++ 中可以通過類名來定義變量。不同的是,通過結(jié)構(gòu)體定義出來的變量還是叫變量,而通過類定義出來的變量有了新的名稱,叫做對(duì)象(Object)。
在第二段代碼中,我們先通過 class
關(guān)鍵字定義了一個(gè)類 Student
,然后又通過 Student
類創(chuàng)建了一個(gè)對(duì)象 stu1。變量和函數(shù)都是類的成員,創(chuàng)建對(duì)象后就可以通過點(diǎn)號(hào).來使用它們。
可以將類比喻成圖紙,對(duì)象比喻成零件,圖紙說明了零件的參數(shù)(成員變量)及其承擔(dān)的任務(wù)(成員函數(shù));一張圖紙可以生產(chǎn)出多個(gè)具有相同性質(zhì)的零件,不同圖紙可以生產(chǎn)不同類型的零件。
類只是一張圖紙,起到說明的作用,不占用內(nèi)存空間;對(duì)象才是具體的零件,要有地方來存放,才會(huì)占用內(nèi)存空間。
在 C++ 中,通過類名就可以創(chuàng)建對(duì)象,即將圖紙生產(chǎn)成零件,這個(gè)過程叫做類的實(shí)例化,因此也稱對(duì)象是類的一個(gè)實(shí)例(Instance)。
有些資料也將類的成員變量稱為屬性(Property),將類的成員函數(shù)稱為方法(Method)。
2、面向?qū)ο缶幊蹋∣bject Oriented Programming,OOP)
類是一個(gè)通用的概念,C++、Java、C#、PHP 等很多編程語言中都支持類,都可以通過類創(chuàng)建對(duì)象??梢詫㈩惪醋鍪墙Y(jié)構(gòu)體的升級(jí)版,C語言的晚輩們看到了C語言的不足,嘗試加以改善,繼承了結(jié)構(gòu)體的思想,并進(jìn)行了升級(jí),讓程序員在開發(fā)或擴(kuò)展大中型項(xiàng)目時(shí)更加容易。
因?yàn)?nbsp;C++
、Java
、C#
、PHP
等語言都支持類和對(duì)象,所以使用這些語言編寫程序也被稱為面向?qū)ο缶幊蹋@些語言也被稱為面向?qū)ο蟮木幊陶Z言。C語言因?yàn)椴恢С诸惡蛯?duì)象的概念,被稱為面向過程的編程語言。
在C語言中,我們會(huì)把重復(fù)使用或具有某項(xiàng)功能的代碼封裝成一個(gè)函數(shù),將擁有相關(guān)功能的多個(gè)函數(shù)放在一個(gè)源文件,再提供一個(gè)對(duì)應(yīng)的頭文件,這就是一個(gè)模塊。使用模塊時(shí),引入對(duì)應(yīng)的頭文件就可以。
而在 C++ 中,多了一層封裝,就是類(Class)。類由一組相關(guān)聯(lián)的函數(shù)、變量組成,你可以將一個(gè)類或多個(gè)類放在一個(gè)源文件,使用時(shí)引入對(duì)應(yīng)的類就可以。下面是C和C++項(xiàng)目組織方式的對(duì)比:
不要小看類(Class
)這一層封裝,它有很多特性,極大地方便了中大型程序的開發(fā),它讓 C++ 成為面向?qū)ο蟮恼Z言。
面向?qū)ο缶幊淘诖a執(zhí)行效率上絕對(duì)沒有任何優(yōu)勢(shì),它的主要目的是方便程序員組織和管理代碼,快速梳理編程思路,帶來編程思想上的革新。
面向?qū)ο缶幊淌轻槍?duì)開發(fā)中大規(guī)模的程序而提出來的,目的是提高軟件開發(fā)的效率。不要把面向?qū)ο蠛兔嫦蜻^程對(duì)立起來,面向?qū)ο蠛兔嫦蜻^程不是矛盾的,而是各有用途、互為補(bǔ)充的。如果你希望開發(fā)一個(gè)貪吃蛇游戲,類和對(duì)象或許是多余的,幾個(gè)函數(shù)就可以搞定;但如果開發(fā)一款大型游戲,那你絕對(duì)離不開面向?qū)ο蟆?/p>
到此這篇關(guān)于C++類和對(duì)象到底是什么的文章就介紹到這了,更多相關(guān)C++類和對(duì)象內(nèi)容請(qǐng)搜索以前的文章或繼續(xù)瀏覽下面的相關(guān)文章。
- 關(guān)于C++類的定義和對(duì)象的創(chuàng)建詳解
- Scratch3.0編程制作換衣服的小女孩動(dòng)畫的教程
- JSP編程實(shí)現(xiàn)簡(jiǎn)單用戶7天內(nèi)免登錄及示例代碼
- JSP編程實(shí)現(xiàn)用戶自動(dòng)登錄功能示例代碼
- ASP編程中Session對(duì)象失效的客戶端解決方法
- Sphero推出編程教學(xué)機(jī)器人Bolt 配備紅外交互+LED點(diǎn)陣
- 哪本書才是編程領(lǐng)域的“九陰真經(jīng)”
- Mac清理過程中如何避免誤刪CleanMyMac語言文件
- 極限黑客機(jī)械鍵盤 分離式外觀支持開源編程
- 優(yōu)必選發(fā)Alpha 1P教育機(jī)器人:人形可編程
關(guān)于C++類的定義和對(duì)象的創(chuàng)建詳解
本篇文章重點(diǎn)講解了兩種創(chuàng)建對(duì)象的方式:一種是在棧上創(chuàng)建,形式和定義普通變量類似;另外一種是在堆上使用 new 關(guān)鍵字創(chuàng)建,必須要用一個(gè)指針指向它,下面和小編一起來學(xué)習(xí)下面為文章的內(nèi)容...
Scratch3.0編程制作換衣服的小女孩動(dòng)畫的教程
scratch3怎么實(shí)現(xiàn)換衣服的小女孩動(dòng)畫?scratch3中想要制作一個(gè)換裝動(dòng)畫效果,該怎么制作呢?下面我們就來看看詳細(xì)的教程,需要的朋友可以參考下。...
JSP編程實(shí)現(xiàn)簡(jiǎn)單用戶7天內(nèi)免登錄及示例代碼
文章主要詳細(xì)介紹了jsp實(shí)現(xiàn)簡(jiǎn)單用戶7天內(nèi)免登錄,文中示例代碼介紹的非常詳細(xì),感興趣的小伙伴們可以參考一下。本文實(shí)例為大家分享了jsp實(shí)現(xiàn)簡(jiǎn)單用戶7天內(nèi)免登錄的具體代碼,供大...
JSP編程實(shí)現(xiàn)用戶自動(dòng)登錄功能示例代碼
文章主要介紹了jsp實(shí)現(xiàn)用戶自動(dòng)登錄功能,文中示例代碼介紹的非常詳細(xì),感興趣的小伙伴們可以參考一下.理解并掌握Cookie的作用以及利用cookie實(shí)現(xiàn)用戶的自動(dòng)登錄功能,實(shí)現(xiàn)下圖效...
ASP編程中Session對(duì)象失效的客戶端解決方法
雖然利用Timeout屬性釋放資源的策略是出于保護(hù)服務(wù)器的目的,但是Session對(duì)象不可預(yù)知的失效性,卻成為開發(fā)應(yīng)用程序的一個(gè)弊病。因而在實(shí)際應(yīng)用程序的開發(fā)中,必須解決Session對(duì)象失效的問題。...
Sphero推出編程教學(xué)機(jī)器人Bolt 配備紅外交互+LED點(diǎn)陣顯示屏
Sphero 剛剛推出了名叫 Bolt 的新款教學(xué)機(jī)器人,與此前推出的 Spark+ 相比,Bolt 最大的特色,就是配備了紅外傳感器和可編程的 LED 點(diǎn)陣顯示屏。在完成任務(wù)的時(shí)候,Bolt 可以顯示一...
哪本書才是編程領(lǐng)域的“九陰真經(jīng)”
前幾天在公眾號(hào)調(diào)查了下“對(duì)自己編程影響最大的一本書是什么”,答案基本不出我所預(yù)料:SICP、HTDP、 K & R C、Hackers and Painters 占據(jù)上風(fēng)。還有幾位說是譚老師的《C語言程序設(shè)計(jì)》,仔細(xì)想想,也算是入門必讀書籍...
Mac清理過程中如何避免誤刪CleanMyMac語言文件
如果需要設(shè)置軟件掃描的時(shí)候不移除某些特定的語言文件,我們可以自行設(shè)置不要從系統(tǒng)或者應(yīng)用程序中移除以下語言,設(shè)置方法如下: 1.啟動(dòng)CleanMyMac,然后選擇“CleanMyMac3”-“偏好設(shè)置” 2...
極限黑客機(jī)械鍵盤 分離式外觀支持開源編程
國(guó)外眾籌網(wǎng)站Indiegogo上架了一款神奇的機(jī)械鍵盤,其最大的特點(diǎn)就是支持開源編程,而且能夠直接從中間“撕成兩半”。...
優(yōu)必選發(fā)Alpha 1P教育機(jī)器人:人形可編程
10月12日,國(guó)內(nèi)知名機(jī)器人公司優(yōu)必選(UBTECH)舉辦新品發(fā)布會(huì),正式發(fā)布全新Alpha1P人形可編程教育機(jī)器人。據(jù)悉,Alpha1P將于今日在天貓正式啟動(dòng)...