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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > c/c++ >内容正文

c/c++

C++ 之const的使用

發布時間:2025/3/17 c/c++ 29 豆豆
生活随笔 收集整理的這篇文章主要介紹了 C++ 之const的使用 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

在類中,有時候為了避免誤操作而修改了一些人們不希望被修改的數據,此時就必須借助const關鍵字加以限定了。借助const關鍵字可以定義const類型的成員變量、成員函數、常對象以及對象的常引用。

const成員變量

const成員變量其用法和普通的const變量用法相似,在定義時只需在前面加上const關鍵字即可。const成員變量的初始化只有唯一的一條途徑:參數初始化表。這個在前面已經提到過,不記得的話可以再去翻看參數初始化表那一小節。

const成員函數

const成員函數可以使用類中的所有成員變量,但是不能修改變量的值,這種措施主要還是為了保護數據而設置的。

我們來看一下下面的例子,例1依然是前面見過多次的book類,不過已經將與const成員函數不相關的代碼都去掉了。在類中定義了兩個構造函數及四個普通的成員函數,其功能分別是設置成員變量和獲得成員變量。但這個book類與前面不相同的是在getprice函數和gettitle函數聲明后面多了const關鍵字,這就是const成員函數,也可以成為常成員函數。常成員函數就是在聲明和定義的時候在函數頭部的結尾加上const關鍵字。注意在定義函數的時候const關鍵字依然是不能少的,具體可以參見例1中getprice和gettitle函數的定義。

為什么要將這兩個函數定義成常成員函數呢?這兩個函數的功能我們知道就是為了返回price和title的,功能單一,并且不希望修改這兩個變量的,如此,定義成常成員函數是非常保險的一種做法,可以避免在這兩個函數內部修改成員變量。如果需要修改這兩個變量則只需通過setprice和settitle函數完成,因此設置為const是非常合適的。

class book{public:book(){}book(char* a, double p = 5.0);void setprice(double a);void settitle(char* a);double getprice()const; char * gettitle()const;private:double price;char * title;};double book::getprice()const{return price;}char * book::gettitle()const{return title;}

常成員函數可以訪問類中的任何成員變量,但是不能修改任何成員變量。而普通的成員函數不能訪問常對象的成員變量,其它的成員變量都可以訪問,普通的成員函數可以修改的成員變量也只有非const成員變量了,一旦加上了const關鍵字加以修飾,初始化完成后就不能被修改了。還有一點需要注意的是const成員函數是不能調用類中非const成員函數的。

const對象

const對象定義的基本語法如下:
? ? const 類名 對象名(實參名);
? ? 類名 const 對象名(實參名);
這兩種定義方式都是可以的,我們一旦將對象定義為常對象之后,該對象就只能調用類中的常成員函數了。

#include<iostream> using namespace std;class book { public:book(){}book(book &b);book(char* a, double p = 5.0);void setprice(double a);double getprice()const;void settitle(char* a);char * gettitle()const;void display()const; private:double price;char * title; };book::book(book &b) {price = b.price;title = b.title; }book::book(char* a, double p) {title = a;price = p; }void book::display()const {cout<<"The price of "<<title<<" is $"<<price<<endl; }void book::setprice(double a) {price = a; }double book::getprice()const {return price; }void book::settitle(char* a) {title = a; }char * book::gettitle()const {return title; }int main() {const book Alice("Alice in Wonderland",29.9);Alice.display(); // Alice.setprice(51.0);//compile errorreturn 0; }

在本例中,我們將類中的getprice、gettitle和display三個函數都聲明為了常成員函數,之后在主函數中我們定義了一個常對象Alice,Alice作為一個常對象,只能調用常成員函數,因此在調用display函數時沒有問題,但是在調用setprice函數時編譯報錯,因為setprice不是常成員函數。

有些時候我們在程序設計過程中要求修改常對象中的某個成員變量,這個時候如果是普通的成員變量是不能被修改的。為了滿足這一需求,C++提供了mutable關鍵字。

mutable int var;

通過這樣的聲明將變量var聲明為可變的成員變量,此時如果要修改常對象的該變量時,只需要通過常對象調用const成員函數修改該變量即可。

對象的const引用

在將對象作為函數參數的時候,通常我們會采用引用的方式作為函數參數。有時候為了在函數中避免對對象本身做出什么修改,在函數形參前加上const關鍵字。

#include<iostream> using namespace std;class book { public:book(){}book(book &b);book(char* a, double p = 5.0);void setprice(double a);double getprice()const;void settitle(char* a);char * gettitle()const; private:double price;char * title; };book::book(book &b) {price = b.price;title = b.title; }book::book(char* a, double p) {title = a;price = p; }void book::setprice(double a) {price = a; }double book::getprice()const {return price; }void book::settitle(char* a) {title = a; }char * book::gettitle()const {return title; }void display(const book &b) {b.setprice(59.9); //compile errorcout<<"The price of "<<b.gettitle()<<" is $"<<b.getprice()<<endl; //ok }int main() {book Alice("Alice in Wonderland",29.9);display(Alice);book Harry("Harry potter", 49.9);display(Harry);return 0; }

在本例中,我們將display函數聲明為頂層函數,其函數形參為book類對象的常引用,在函數內部我們首先調用public屬性的setprice函數,企圖修改price成員變量,編譯無法通過。而在其后調用gettitle和getprice函數則沒有問題,因為這些函數沒有修改成員變量。

?

轉載于:https://www.cnblogs.com/wanghuixi/p/7008231.html

總結

以上是生活随笔為你收集整理的C++ 之const的使用的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。