C++類和對(duì)象到底是什么
1、C++ 中的類
C++ 中的類(Class)可以看做C語(yǔ)言中結(jié)構(gòu)體(Struct)的升級(jí)版。結(jié)構(gòu)體是一種構(gòu)造類型,可以包含若干成員變量,每個(gè)成員變量的類型可以不同;可以通過(guò)結(jié)構(gòu)體來(lái)定義結(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ù);通過(guò)類定義出來(lái)的變量也有特定的稱呼,叫做“對(duì)象”。
例如:
#include <stdio.h> //通過(guò)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(){ //通過(guò)類來(lái)定義變量,即創(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ǔ)上編寫的,我并不希望一開始就提出過(guò)多的 C++ 概念,讓讀者吃不消,我希望讀者從C逐漸過(guò)渡到 C++,從第二章開始編寫規(guī)范的 C++ 代碼。也就是說(shuō),包括本節(jié)在內(nèi),第一章有很多不規(guī)范的 C++ 代碼,再次請(qǐng)熟悉 C++ 的讀者忽略。
class
和 public
都是 C++ 中的關(guān)鍵字,初學(xué)者請(qǐng)先忽略 public
(后續(xù)會(huì)深入講解),把注意力集中在 class 上。
C語(yǔ)言中的 struct 只能包含變量,而 C++ 中的 class 除了可以包含變量,還可以包含函數(shù)。display()
是用來(lái)處理成員變量的函數(shù),在C語(yǔ)言中,我們將它放在了 struct Student
外面,它和成員變量是分離的;而在 C++ 中,我們將它放在了 class Student
內(nèi)部,使它和成員變量聚集在一起,看起來(lái)更像一個(gè)整體。
結(jié)構(gòu)體和類都可以看做一種由用戶自己定義的復(fù)雜數(shù)據(jù)類型,在C語(yǔ)言中可以通過(guò)結(jié)構(gòu)體名來(lái)定義變量,在 C++ 中可以通過(guò)類名來(lái)定義變量。不同的是,通過(guò)結(jié)構(gòu)體定義出來(lái)的變量還是叫變量,而通過(guò)類定義出來(lái)的變量有了新的名稱,叫做對(duì)象(Object)。
在第二段代碼中,我們先通過(guò) class
關(guān)鍵字定義了一個(gè)類 Student
,然后又通過(guò) Student
類創(chuàng)建了一個(gè)對(duì)象 stu1。變量和函數(shù)都是類的成員,創(chuàng)建對(duì)象后就可以通過(guò)點(diǎn)號(hào).來(lái)使用它們。
可以將類比喻成圖紙,對(duì)象比喻成零件,圖紙說(shuō)明了零件的參數(shù)(成員變量)及其承擔(dān)的任務(wù)(成員函數(shù));一張圖紙可以生產(chǎn)出多個(gè)具有相同性質(zhì)的零件,不同圖紙可以生產(chǎn)不同類型的零件。
類只是一張圖紙,起到說(shuō)明的作用,不占用內(nèi)存空間;對(duì)象才是具體的零件,要有地方來(lái)存放,才會(huì)占用內(nèi)存空間。
在 C++ 中,通過(guò)類名就可以創(chuàng)建對(duì)象,即將圖紙生產(chǎn)成零件,這個(gè)過(guò)程叫做類的實(shí)例化,因此也稱對(duì)象是類的一個(gè)實(shí)例(Instance)。
有些資料也將類的成員變量稱為屬性(Property),將類的成員函數(shù)稱為方法(Method)。
2、面向?qū)ο缶幊蹋∣bject Oriented Programming,OOP)
類是一個(gè)通用的概念,C++、Java、C#、PHP 等很多編程語(yǔ)言中都支持類,都可以通過(guò)類創(chuàng)建對(duì)象??梢詫㈩惪醋鍪墙Y(jié)構(gòu)體的升級(jí)版,C語(yǔ)言的晚輩們看到了C語(yǔ)言的不足,嘗試加以改善,繼承了結(jié)構(gòu)體的思想,并進(jìn)行了升級(jí),讓程序員在開發(fā)或擴(kuò)展大中型項(xiàng)目時(shí)更加容易。
因?yàn)?C++
、Java
、C#
、PHP
等語(yǔ)言都支持類和對(duì)象,所以使用這些語(yǔ)言編寫程序也被稱為面向?qū)ο缶幊?,這些語(yǔ)言也被稱為面向?qū)ο蟮木幊陶Z(yǔ)言。C語(yǔ)言因?yàn)椴恢С诸惡蛯?duì)象的概念,被稱為面向過(guò)程的編程語(yǔ)言。
在C語(yǔ)言中,我們會(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(yǔ)言。
面向?qū)ο缶幊淘诖a執(zhí)行效率上絕對(duì)沒有任何優(yōu)勢(shì),它的主要目的是方便程序員組織和管理代碼,快速梳理編程思路,帶來(lái)編程思想上的革新。
面向?qū)ο缶幊淌轻槍?duì)開發(fā)中大規(guī)模的程序而提出來(lái)的,目的是提高軟件開發(fā)的效率。不要把面向?qū)ο蠛兔嫦蜻^(guò)程對(duì)立起來(lái),面向?qū)ο蠛兔嫦蜻^(guò)程不是矛盾的,而是各有用途、互為補(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)文章
基于QT制作一個(gè)TCPServer與TCPClient的通信
這篇文章主要為大家詳細(xì)介紹了如何基于QT制作一個(gè)TCPServer與TCPClient的通信,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下2023-12-12C/C++ Qt 數(shù)據(jù)庫(kù)與Chart歷史數(shù)據(jù)展示
這篇文章主要介紹了Qt利用Qchart組件展示數(shù)據(jù)庫(kù)中的歷史數(shù)據(jù)。文中的示例代碼講解清晰,具有一定的學(xué)習(xí)和工作價(jià)值,感興趣的小伙伴可以學(xué)習(xí)一下2021-12-12C語(yǔ)言詳細(xì)講解if語(yǔ)句與switch語(yǔ)句的用法
用 if 語(yǔ)句可以構(gòu)成分支結(jié)構(gòu),它根據(jù)給的條件進(jìn)行判定,以決定執(zhí)行哪個(gè)分支程序段,C 語(yǔ)言中還有另外一種分支語(yǔ)句,就是 switch 語(yǔ)句2022-05-05C++深入講解對(duì)象的銷毀之析構(gòu)函數(shù)
構(gòu)造函數(shù)在創(chuàng)建對(duì)象時(shí)被系統(tǒng)自動(dòng)調(diào)用,而析構(gòu)函數(shù)(Destructor)在對(duì)象被撤銷時(shí)被自動(dòng)調(diào)用,相比構(gòu)造函數(shù),析構(gòu)函數(shù)要簡(jiǎn)單的多2022-04-04C++如何在一個(gè)函數(shù)內(nèi)返回不同類型(三種方法)
C++?中要在一個(gè)函數(shù)內(nèi)返回不同類型的值,你可以使用?C++17?引入的?std::variant?或?std::any,或者使用模板和多態(tài),下面將分別介紹這些方法,需要的朋友可以參考下2023-12-12C/C++ break和continue區(qū)別及使用方法
這篇文章主要介紹了C/C++ break和continue區(qū)別及使用方法的相關(guān)資料,需要的朋友可以參考下2017-07-07C語(yǔ)言安全之?dāng)?shù)組長(zhǎng)度與指針實(shí)例解析
這篇文章主要介紹了C語(yǔ)言安全之?dāng)?shù)組長(zhǎng)度與指針,需要的朋友可以參考下2014-07-07C++?OpenCV實(shí)現(xiàn)二維碼檢測(cè)功能
這篇文章主要介紹了如何利用C++?OpenCV實(shí)現(xiàn)二維碼檢測(cè)功能,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下2022-01-01