日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程语言 > c/c++ >内容正文

c/c++

【C++ 语言】面向对象 ( 类定义 | 限制头文件引用次数 | 构造方法 | 析构方法 )

發(fā)布時間:2025/6/17 c/c++ 28 豆豆
生活随笔 收集整理的這篇文章主要介紹了 【C++ 语言】面向对象 ( 类定义 | 限制头文件引用次数 | 构造方法 | 析构方法 ) 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

文章目錄

        • 類的定義 ( 頭文件引用次數(shù)控制 )
        • 類的實(shí)現(xiàn) ( 構(gòu)造函數(shù) | 析構(gòu)函數(shù) )
        • CMake 編譯配置
        • 類測試 ( 構(gòu)造析構(gòu)調(diào)用測試 )



類的定義 ( 頭文件引用次數(shù)控制 )



類定義 , 類一般定義在一個單獨(dú)的文件中 , C++ 的文件名不像 Java 一樣必須與類名相同 , C++ 中的文件名可以與類名不相等 , 一般情況下盡量讓類名與文件名一致 ;

創(chuàng)建頭文件 , 右鍵點(diǎn)擊源碼路徑 , 選擇 “添加” -> “添加新項(xiàng)” , 彈出新建文件對話框 ;

選擇創(chuàng)建文件類型 , 選擇左側(cè) “Visual C++” 下的 “頭文件(.h)” 選項(xiàng) , 然后點(diǎn)擊打開 , 在右側(cè)的解決方案資源管理器中修改頭文件名稱為 “Student.h” ;

頭文件引用次數(shù)控制 : Student.h 頭文件中 , 會自動生成一行代碼 #pragma once , 這是為了防止重復(fù)的引用頭文件 , 這是使用預(yù)處理方式保證這個頭文件只會被引用一次 , 這種方式很多編譯器不支持 , 常用的訪問重復(fù)引用頭文件的方法是使用宏定義 ;

//C/C++ 預(yù)處理指令, 保證頭文件只被編譯一次 #pragma once//使用宏定義的方式保證頭文件只被編譯一次 #ifndef STUDENT_H #define STUDENT_H#endif // !STUDENT_H

類的定義 : 在 Student.h 中聲明該類 ; 使用 class 關(guān)鍵字聲明類 , 在其中可以定義屬性和方法 ; C++ 類中屬性和方法有三種作用域 , 分別是 private , protected, public , 如果沒有聲明作用域 , 其作用域默認(rèn)是 private ; 聲明類時 , 可以聲明構(gòu)造函數(shù)和析構(gòu)函數(shù) , 這里注意 , 析構(gòu)方法名稱與構(gòu)造方法的名稱必須是一樣的 ; 具體請看如下代碼示例 ;

Student.h

//C/C++ 預(yù)處理指令, 保證頭文件只被編譯一次 #pragma once//使用宏定義的方式保證頭文件只被編譯一次 #ifndef STUDENT_H #define STUDENT_H//使用 class 關(guān)鍵字 聲明類 class Student {//默認(rèn)作用域 : 如果沒有指定作用域, 其作用域默認(rèn)是 private 私有的//類中的屬性定義 int age;//指定作用域 , 共有的 public ://定義構(gòu)造方法Student(int age, int id);//定義析構(gòu)函數(shù)~Student();//指定私有作用域 private:int id;//受保護(hù)的作用域 protected:int number;};#endif // !STUDENT_H

類的實(shí)現(xiàn) ( 構(gòu)造函數(shù) | 析構(gòu)函數(shù) )



創(chuàng)建 Student.h 對應(yīng)的 Student.cpp 文件 , 右鍵點(diǎn)擊源碼路徑 , 選擇 “添加” -> “添加新項(xiàng)” , 彈出新建文件對話框 ;

選擇創(chuàng)建文件類型 , 選擇左側(cè) “Visual C++” 下的 “C++ 文件(.cpp)” 選項(xiàng) , 然后點(diǎn)擊打開 , 在右側(cè)的解決方案資源管理器中修改頭文件名稱為 “Student.cpp” ;

類的實(shí)現(xiàn) , 在 Student.h 頭文件中定義類之后 , 可以在 Student.cpp 中實(shí)現(xiàn)聲明的類 ; 上面已經(jīng)創(chuàng)建好了 Student.cpp 類 , 在類中先包含 Student.h 頭文件 , 然后實(shí)現(xiàn)類中聲明的構(gòu)造函數(shù)與析構(gòu)函數(shù) , 該類就可以使用了 ; 如果沒有實(shí)現(xiàn)其構(gòu)造函數(shù)與析構(gòu)函數(shù) , 直接使用該類會報錯 ;

實(shí)現(xiàn)構(gòu)造函數(shù)與析構(gòu)函數(shù) , 需要用到域作用符 , 使用 Student::Student(){...} 實(shí)現(xiàn)構(gòu)造函數(shù) , 使用 Student::~Student(){...} 實(shí)現(xiàn)析構(gòu)函數(shù) ; 此處包含 iostream 頭文件 , 和 使用 std 命名空間是為了使用 cout<<...<<endl 標(biāo)準(zhǔn)輸出流進(jìn)行控制臺輸出 ;

構(gòu)造方法 , 構(gòu)造方法傳入?yún)?shù) , 構(gòu)造方法可以傳入?yún)?shù) , 其實(shí)現(xiàn)中的參數(shù)必須相同 , 調(diào)用時也必須傳入?yún)?shù)才可以 ; 在構(gòu)造方法中給成員變量賦值 , 可以使用 this->成員變量名稱 來訪問類中聲明的成員變量 ; 還有一種更簡潔的方法是在構(gòu)造方法參數(shù)后面添加 :類成員變量名 ( 參數(shù)名稱 ) , 如 Student::Student(int age, int id) 構(gòu)造方法中 , 要給 age 成員變量賦值 , 可以使用 this->age = age , 也可以使用 Student::Student(int age, int id):age(age) 方式進(jìn)行賦值 , :age(age) 表示使用 age 參數(shù)給成員變量 age 賦值 , 前面括號外的 age 表示成員變量 , 后面括號中的 age 表示參數(shù) ;

析構(gòu)方法 , 析構(gòu)方法與構(gòu)造方法是成對使用的 , 在構(gòu)造方法中可能會申請內(nèi)存 ( malloc ) , 如果不釋放這塊內(nèi)存 , 就會造成內(nèi)存泄漏 , 這樣就需要在析構(gòu)方法中將構(gòu)造方法中對應(yīng)的內(nèi)存釋放掉 ( free ) ; 析構(gòu)方法不要手動調(diào)用 , 其會在對象內(nèi)存釋放的時候自動調(diào)用 ;

Student.cpp

#include "Student.h" #include <iostream>using namespace std;//使用域作用符實(shí)現(xiàn)構(gòu)造方法 //方法參數(shù)后面的 :age(age) 表示使用 age 參數(shù)給成員變量 age 賦值 //前面括號外的 age 表示成員變量 , 后面括號中的 age 表示參數(shù) Student::Student(int age, int id):age(age) {//使用 this 關(guān)鍵字可以訪問類中的成員變量this->id = id;cout<< "Student() 構(gòu)造方法" <<endl; }//使用域作用符實(shí)現(xiàn)析構(gòu)方法 Student::~Student() {cout << "~Student() 析構(gòu)方法" << endl; }//只有實(shí)現(xiàn)了構(gòu)造方法和析構(gòu)方法之后 , //Student 這個類才可以拿出去使用

CMake 編譯配置



CMake 編譯配置 , 上面定義了 Student.h 和 Student.cpp 兩個文件 , 需要加入到項(xiàng)目中并編譯 , 需要在 CMakeLists.txt 文件中進(jìn)行配置 , 在 add_executable 配置項(xiàng)中將上面定義的兩個文件配置到其中 ;

# CMakeList.txt: 003_Object_Oriented 的 CMake 項(xiàng)目,在此處包括源代碼并定義 # 項(xiàng)目特定的邏輯。 # cmake_minimum_required (VERSION 3.8)# 將源代碼添加到此項(xiàng)目的可執(zhí)行文件。 add_executable (003_Object_Oriented "003_Object_Oriented.cpp" "003_Object_Oriented.h" "Student.cpp" "Student.h")# TODO: 如有需要,請?zhí)砑訙y試并安裝目標(biāo)。

類測試 ( 構(gòu)造析構(gòu)調(diào)用測試 )



棧內(nèi)存中 Student 類測試 , 首先包含 Student.h 頭文件 , 聲明一個 OOTest() 方法 , 在方法中直接聲明 Student 對象, student 對象處于棧內(nèi)存中 , 其作用域僅限于 OOTest 函數(shù) , OOTest 方法執(zhí)行完就會清理掉其棧內(nèi)存 ; 系統(tǒng)會自動調(diào)用 Student 類的析構(gòu)函數(shù) ;

代碼示例 :
003_Object_Oriented.cpp

// 003_Object_Oriented.cpp: 定義應(yīng)用程序的入口點(diǎn)。 //#include "003_Object_Oriented.h"//引用 Student 類聲明的頭文件 #include "Student.h"using namespace std;void OOTest() {//在方法中直接聲明 Student 對象, student 對象處于棧內(nèi)存中 , //其作用域僅限于 OOTest 函數(shù) , 方法執(zhí)行完就會清理掉Student student(18, 1); }int main() {cout << "Hello Student" << endl;OOTest();//在上面的 OOTest() 方法中的棧內(nèi)存中創(chuàng)建了 Student 對象//當(dāng) OOTest() 方法執(zhí)行完畢后 , 就會釋放掉 Student 對象return 0; }

執(zhí)行結(jié)果 :

Hello Student Student() 構(gòu)造方法 ~Student() 析構(gòu)方法

總結(jié)

以上是生活随笔為你收集整理的【C++ 语言】面向对象 ( 类定义 | 限制头文件引用次数 | 构造方法 | 析构方法 )的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。