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