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

歡迎訪問 生活随笔!

生活随笔

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

c/c++

【3.1】学习C++之再逢const

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

隨著學習的深入,就會發現曾經學的const還有更深入的用法,現在就對const的未總結的用法進行總結。

本文就是針對const在類中的情況進行的總結。

有時我們會遇到下面這種將類的成員變量用const進行修飾的情況

class Coordinate { public:Coordinate(int x,int y); private:const int m_iX;const int m_iY; }

在這種被const修飾過的成員變量進行賦值的時候需要注意:

Coordinate::Coordinate(int x,int y) {m_iX = x;m_iY = y; }

這種賦值方式是錯誤的,需要用初始化列表,如下:

Coordinate::Coordinate(int x,int y):m_iX(x),m_iY(y) { }

當然如果這個類的成員變量的類型是另一個類,也被const修飾,如下:

class Line { public:Line(int x1,int y1,int x2,int y2); private:const Coordinate m_coorA;const Coordinate m_coorB; }

那么,他的初始化依舊是只能使用初始化列表:

Line::Line(int x1,int y1,int x2,int y2):m_coorA(x1,y1),m_coorB(x2,y2) {cout<<"Line"<<endl; }

當然,const不止能修飾成員變量,也能修飾成員函數,下面就對Coordinate類進行稍作添加修改:

class Coordinate { public:Coordinate(int x,int y);void changeX() const;void changeX(); private:const int m_iX;const int m_iY; }

其中,我們重載定義了兩個changeX成員函數,其中一個用const修飾,那么我們需要注意下面一個問題:

void Coordinate::changeX() const {m_iX=10;//錯誤 }void Coordinate::changeX() {m_iX=20; }

被const修飾的成員函數(即常成員函數)不能改變數據成員的值,

是因為編譯時會變成下面的樣子

void changeX(const Coordinate *this) {this->m_iX=10; }

會隱含著this指針,這個this指針是被const修飾的,即為常指針,這個常指針不能修改所指向的數據。

雖然這兩個changeX是重載的,但是一定要分清楚什么時候調用哪個。

int main(void) {const Coordinate Coordinate(3,5);//常對象Coordinate.changeX();//調用的是常成員函數return 0; }

只有用const修飾并聲明的常對象才能調用常成員函數。

轉載于:https://www.cnblogs.com/H2Rain/p/10909990.html

總結

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

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