【3.1】学习C++之再逢const
生活随笔
收集整理的這篇文章主要介紹了
【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的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Day 8 面向对象
- 下一篇: MVC案例——模糊查询