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

歡迎訪問(wèn) 生活随笔!

生活随笔

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

c/c++

【C++ 语言】面向对象 ( 成员函数 | 常量函数 | 友元函数 | 友元类 | 单例类 )

發(fā)布時(shí)間:2025/6/17 c/c++ 29 豆豆
生活随笔 收集整理的這篇文章主要介紹了 【C++ 语言】面向对象 ( 成员函数 | 常量函数 | 友元函数 | 友元类 | 单例类 ) 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

文章目錄

        • 成員函數(shù)
        • 常量函數(shù)
        • 友元函數(shù)
        • new 創(chuàng)建對(duì)象
        • 友元類
        • 單例類



成員函數(shù)



此處繼續(xù)上一篇博客繼續(xù)向后講解C++面向?qū)ο?/p>

類成員方法 , 除了定義構(gòu)造方法與析構(gòu)方法之外 , 還可以定義普通的成員方法 , 如設(shè)置 int age 變量的方法 , 這里聲明一個(gè)成員方法 , 傳入?yún)?shù) int age , 給成員變量 int age 賦值 ;

使用共有函數(shù)訪問(wèn)私有成員變量 , 在類中私有的成員變量時(shí)不允許從外部直接訪問(wèn)的 , 需要通過(guò)共有函數(shù)來(lái)訪問(wèn) , 在共有函數(shù)中調(diào)用 this->成員變量 進(jìn)行訪問(wèn) ; 這里的訪問(wèn)是指獲取成員變量的值 , 或修改成員變量的值 ;

成員函數(shù)中申請(qǐng)內(nèi)存 , 需要在析構(gòu)函數(shù)中將內(nèi)存釋放 , 不管在構(gòu)造函數(shù) , 還是在成員函數(shù)中申請(qǐng)的內(nèi)存 , 都需要在析構(gòu)函數(shù)中 , 將內(nèi)存釋放掉 ;

Student.h 中相關(guān)聲明 :

//默認(rèn)作用域 : 如果沒有指定作用域, 其作用域默認(rèn)是 private 私有的//類中的屬性定義 int age;//聲明共有的成員方法 , 該方法需要實(shí)現(xiàn) public : void setAge(int age);

Student.cpp 實(shí)現(xiàn)上述聲明的方法 :

void Student::setAge(int age) {//使用 this 關(guān)鍵字訪問(wèn)成員變量 , 并給成員變量賦值this->age = age; }

常量函數(shù)



外部訪問(wèn)類中的私有成員變量 , 有兩種方法 , 一種是使用共有的成員方法訪問(wèn) , 另一種是在友元函數(shù)中訪問(wèn) ;

常量函數(shù) , 在頭文件中函數(shù)定義時(shí) , 在方法后面加上 const 關(guān)鍵字 , 這個(gè)函數(shù)就變成了常量函數(shù) , 該函數(shù)中不允許修改類中的成員變量 , 一般獲取成員變量值的函數(shù)可以定義成常量函數(shù) ;

成員函數(shù)聲明時(shí)可以直接實(shí)現(xiàn) , 可以在類中聲明成員函數(shù)的位置 , 直接實(shí)現(xiàn)該函數(shù) , 這樣就不同在 Student.cpp 中實(shí)現(xiàn)了 ;

Student.h 中聲明并實(shí)現(xiàn)成員方法 :

//默認(rèn)作用域 : 如果沒有指定作用域, 其作用域默認(rèn)是 private 私有的//類中的屬性定義 int age;//聲明共有的成員方法 , 該方法需要實(shí)現(xiàn) public : //在函數(shù)后加上 const , 該函數(shù)就變成了常量函數(shù)//常量函數(shù)中是不允許修改成員變量的//函數(shù)在聲明的時(shí)候也可以實(shí)現(xiàn)int getAge()const {return this->age;}

友元函數(shù)



外部訪問(wèn)類中的私有成員變量 , 有兩種方法 , 一種是使用共有的成員方法訪問(wèn) , 另一種是在友元函數(shù)中訪問(wèn) ;

友元函數(shù) , 在友元函數(shù)中 , 可以從類的外部訪問(wèn)類中的私有成員變量 , 友元函數(shù)聲明方法 friend 返回值類型 方法名稱 ( 參數(shù)列表 ) ; ;

Student.h 中友元函數(shù)聲明

//友元函數(shù)聲明 , 可以在外部修改類中的私有成員變量friend void changeAge(Student*);

友元函數(shù)實(shí)現(xiàn) , 友元函數(shù)并不與類實(shí)現(xiàn)寫在一起 , 而是在使用的位置進(jìn)行實(shí)現(xiàn) , 這里在 main() 函數(shù)所在的文件中進(jìn)行實(shí)現(xiàn) , 在該實(shí)現(xiàn)的友元函數(shù)中 , 可以訪問(wèn)類對(duì)象的私有成員變量和方法 ;

003_Object_Oriented.cpp ( main函數(shù)定義文件 ) 中友元函數(shù)實(shí)現(xiàn)

//引用 Student 類聲明的頭文件 #include "Student.h"//友元函數(shù)實(shí)現(xiàn) , 在類的外部修改類中的私有成員變量 age void changeAge(Student* student){student->age = 88; }

new 創(chuàng)建對(duì)象



使用 new 創(chuàng)建對(duì)象 , 表示在堆中申請(qǐng)內(nèi)存 , 將其定義成 Student 類型 , new 與 mallloc 作用類似 , 當(dāng)對(duì)象不使用之后 , 需要使用 delete 對(duì)象名 , 對(duì)象會(huì)自動(dòng)調(diào)用析構(gòu)函數(shù) , 將該對(duì)象銷毀 ; 下面的代碼中展示了 , 創(chuàng)建對(duì)象 , 使用對(duì)象 , 銷毀對(duì)象的過(guò)程 ;

  • 創(chuàng)建對(duì)象 , new Student(18, 1); 使用 new 關(guān)鍵字 , 在堆內(nèi)存中創(chuàng)建對(duì)象 , 注意這種對(duì)象使用完畢后需要手動(dòng)調(diào)用 delete 對(duì)象名 進(jìn)行釋放 ;
  • 友元函數(shù) , changeAge(student); 是調(diào)用友元函數(shù)修改對(duì)象的私有成員變量 ;
  • 常量函數(shù) , student->getAge() 調(diào)用共有的常量函數(shù) , 獲取私有成員變量值 , 注意常量函數(shù)中不允許修改成員變量值 , 只允許獲取該值 ;
  • 釋放內(nèi)存 , delete student 作用是, 釋放使用 new 申請(qǐng)的堆內(nèi)存中的內(nèi)存 ;
//使用 new 創(chuàng)建對(duì)象 , 注意該對(duì)象在堆內(nèi)存中創(chuàng)建的 //用完之后需要使用 delete 釋放該對(duì)象Student* student = new Student(18, 1);//調(diào)用友元函數(shù), 修改 student 對(duì)象類私有變量 age 的值changeAge(student);//調(diào)用 getAge() 常量函數(shù)獲取 student 對(duì)象的 age 成員變量值//并將該值打印出來(lái)cout<< "age : " << student->getAge() <<endl;//釋放使用 new 申請(qǐng)的堆內(nèi)存中的內(nèi)存delete student;

代碼執(zhí)行結(jié)果

Student() 構(gòu)造方法 age : 88 ~Student() 析構(gòu)方法



友元類



友元類 , 友元類中所有的成員函數(shù)都是該類的友元函數(shù) , 可以訪問(wèn)該類對(duì)象的私有成員變量 ;

友元類聲明 , 聲明友元類方法 friend class 友元類名稱; , 友元類中所有的成員函數(shù)都是該類的友元函數(shù) ;

Student.h 中友元類聲明

//聲明友元類 , 可以在友元類中訪問(wèn)修改類中的私有成員變量//友元類中的所有的成員函數(shù)都是友元函數(shù)friend class Teacher;

友元類定義與實(shí)現(xiàn) , 友元類中定義的方法都是 Student 類的友元函數(shù) , 其中需要傳入 Student* 參數(shù)來(lái)訪問(wèn) Student 對(duì)象的私有成員變量 ; 可以在定義的時(shí)候 , 直接將該方法實(shí)現(xiàn) ;

//Student 中的友元類 , 該友元類中的所有函數(shù)都是 Student 對(duì)象的友元函數(shù) class Teacher {public://友元類中聲明方法 , 修改 Student 中的 id 編號(hào)void setId(Student* student, int id) {student->id = id;}};

單例類



單例類三要素

  • ① 私有靜態(tài)單例類類型的靜態(tài)成員變量 ;
  • ② 私有構(gòu)造函數(shù) ;
  • ③ 靜態(tài)共有方法 , 該方法中調(diào)用私有構(gòu)造方法創(chuàng)建唯一一個(gè)單例類對(duì)象 ;

單例類聲明 , 創(chuàng)建 Instance 單例類 ;

  • ① 聲明一個(gè)私有的靜態(tài)成員變量 , 外部不能直接訪問(wèn)該成員變量 ; private : static Instance* instance; ;
  • ② 聲明私有構(gòu)造函數(shù) , 外部不能直接調(diào)用構(gòu)造方法創(chuàng)建該類對(duì)象 ; private : Instance(); ;
  • ③ 聲明靜態(tài)共有的方法 , 在該方法中調(diào)用私有構(gòu)造函數(shù)創(chuàng)建單例對(duì)象 , public : static Instance* getInstance(); , 注意創(chuàng)建的這個(gè)單例對(duì)象是唯一的 , 只能創(chuàng)建一個(gè) ;

Instance.h 單例類聲明

#pragma onceclass Instance {//聲明一個(gè)私有的靜態(tài)成員變量 , 及構(gòu)造方法 //外部不能直接調(diào)用構(gòu)造方法創(chuàng)建該類對(duì)象 private :static Instance* instance;Instance();//聲明共有靜態(tài)方法 //該方法中可調(diào)用私有構(gòu)造方法并返回 Instance 對(duì)象 public :static Instance* getInstance();public : int number = 888;};

單例類實(shí)現(xiàn) , 在實(shí)現(xiàn)中 , 首先給 Instance::instance 靜態(tài)成員變量賦值初始值 0 , 靜態(tài)成員變量可以使用 類名::靜態(tài)成員變量名 訪問(wèn) ; 然后實(shí)現(xiàn)私有的構(gòu)造函數(shù) , 最后實(shí)現(xiàn)共有的單例類獲取函數(shù) , 在該函數(shù)中首先判定單例類對(duì)象是否已經(jīng)創(chuàng)建 , 如果已經(jīng)創(chuàng)建 , 直接返回該單例類對(duì)象 , 如果沒有創(chuàng)建那么先創(chuàng)建該單例類對(duì)象 , 再返回該單例對(duì)象 instance ;

//設(shè)置Instance 靜態(tài)成員變量 初始值值 //靜態(tài)成員變量可以使用 類名::靜態(tài)成員變量名 訪問(wèn) Instance* Instance::instance = 0;//實(shí)現(xiàn)構(gòu)造函數(shù) Instance::Instance() { }//實(shí)現(xiàn) getInstance 靜態(tài)成員函數(shù) //方法的實(shí)現(xiàn)中 , 可以使用 this-> 調(diào)用成員變量或成員方法 //靜態(tài)的成員變量和成員函數(shù)可以直接調(diào)用 Instance* Instance::getInstance() {if (!instance) {instance = new Instance();}return instance; }

單例類使用 , 首先在 CMakeList.txt 中配置上面的 Instance.h 和 Instance.cpp 兩個(gè)文件 , 然后在 main() 函數(shù)所在文件 , 包含 Instance.h 頭文件 , 即可在 main() 中使用該單例類了 ; 調(diào)用 Instance::getInstance(); 可創(chuàng)建單例類 , 注意單例類使用完畢后要釋放該類 , 否則會(huì)造成內(nèi)存泄漏 ;

//創(chuàng)建單例對(duì)象Instance* instance = Instance::getInstance();//打印單例對(duì)象中的變量值cout << "單例 instance->number : " << instance->number << endl;//釋放單例類delete instance;

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

單例 instance->number : 888

總結(jié)

以上是生活随笔為你收集整理的【C++ 语言】面向对象 ( 成员函数 | 常量函数 | 友元函数 | 友元类 | 单例类 )的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

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