-
13245
查看全部 -
對象各自的this指針指向各自對象的首地址,所以不同對象的this指針一定指向不同的內存地址
查看全部 -
const 主要的作用?
固定常數據成員?
查看全部 -
定義對象引用時,直接賦值
定義對象指針時,要取地址
加了const實際上是改變了權限,只讀權限
查看全部 -
const 修飾基本類型,同#define
const修飾對象,通過初始化列表初始化
const修飾成員函數,隱含參數this,故不能修改數據成員
同名的有無const修飾的兩個函數,互為重載,但是一般沒必要
使用常對象調用的是常成員函數
查看全部 -
如果想要返回原來的值,而非新值,使用引用&查看全部
-
淺拷貝存在的問題:
? ? 當對象的數據成員中包含指針變量時,淺拷貝有可能出現兩個指針指向同一塊內存區域的現象,這會導致對兩個對象的寫操作被覆蓋,甚至可能會出現同一塊內存被釋放兩次的情況,造成系統崩潰。
查看全部 -
Coordinate * const pCoor = &coor1 : 這種方式定義的常指針“只能指向coor1,但可以調用coor1的不同的函數”;(擁有讀寫權限) const Coordinate *pCoor = &coor1 ?: 只能調用coor1的“常成員函數”。(只擁有讀權限)
常對象引用與常對象指針?
const Coordinate& coor2 ; const Coordinate *p; 只具有讀權限,所以只能調用常成員函數。調用成員函數過程其實就是一個隱式的this指針,普通成員函數傳遞的是Coordinate *this指針,而常成員函數傳遞的是常指針const Coordinate *this(只具有讀權限)。 注意,Coordinate * const p,該指針表明指針地址為常量,指針所指向的對象值是可以改變的,也就是說該指針具有讀寫權限
查看全部 -
用const修飾對象成員,對象成員就變成了常對象成員 用const修飾成員函數,成員函數就變成了常成員函數。const要放在函數的最后, 一旦初始化就不能再修改,const就是干這個的,長對象成員用初始化列表初始化 函數里看著沒有參數,實際上隱藏著this指針。常成員函數中隱藏的是常this指針,常指針指向的數據不允許被修改 例如:void Coordinate::changeX(){m_iX = 10;}即為void Coordinate::changeX(Coordinate *this){this->m_iX = 10;} void Coordinate::changeX()const{m_iX = 10;}即為void Coordinate::changeX(const Coordinate *this){this->m_iX = 10;}這里的m_iX = 10;的寫法是錯誤的,this已經是常指針,通過常指針是無法修改值的 void changeX();與void changeX() const互為重載 要調用const修飾的常成員函數,實例化對象時,必須用const來修飾對象,const寫在最前面
查看全部 -
1、 Array ... return *this 相當于: Array arrX = arr1; arrX是一個新的對象。即返回的this指針為另一個臨時對象 2、 Array& ... return *this 相當于: Array & arrX = arr1; 此時arrX是arr1的別名。 3、 Array* ... return this 相當于: Array* arrX = this; 此時arrX的值 是地址,且是指向arr1的。用->訪問或者*p. 訪問
查看全部 -
1.對象成員指針可以在初始化列表中初始化也可以在構造函數中初始化。
查看全部 -
對象指針:類名 * 指針名 ?= new 類名
查看全部 -
1.對象成員:
對于復合類來說,子類的構造函數中如果存在參數,那么母類必須通過初始化列表的形式來對母類對象中的子類對象進行賦值。如圖中的坐標系類
查看全部 -
/****************Array.h*******************/ class?Array{ ????public: ????????Array(int?len); ????????~Array(); ????????Array*?setLen(int?len); ????????int?getLen(); ????????Array*?printInfo(); ????private: ????????int?len; }; /****************Array.cpp*******************/ #include"Array.h" #include<iostream> using?namespace?std; Array::Array(int?len){ ????this->len?=?len; } Array::~Array(){} Array*?Array::setLen(int?len){ ????this->len?=?len; ????return?this; } int?Array::getLen(){ ????cout<<"len="<<len<<endl; ????return?this->len; } Array*?Array::printInfo(){ ????cout<<"len="<<len<<endl; ????return?this;???//this是指針,*this就是一個對象 } /****************demo.cpp*******************/ #include<stdlib.h> #include<iostream> #include"Array.h" using?namespace?std; int?main(void){ ????Array?arr1(2); ????Array??*arr2; ????arr2?=?&arr1; ????arr2->printInfo()->setLen(3)->printInfo(); ????arr2->getLen(); ????system("pause"); ????return?0; }
查看全部 -
/***************arry.h******************/ class?arry { ????public: ????????arry(int?_count); ????????virtual?~arry(); ????????arry?(const?arry?&arr); ????????void?setCount(int?_count); ????????int?getCount(); ????????void?printAddr(); ????????void?printarr(); ????protected: ????private: ????????int?m_iCount; ????????int?*m_pArr; }; /***************arry.cpp******************/ #include<iostream> #include"arry.h" using?namespace?std; arry::arry(int?_count) { ????m_iCount?=?_count; ????m_pArr?=?new?int[m_iCount]; ????for(int?i?=?0;i<m_iCount;i++){ ????????m_pArr[i]?=?i; ????//cout<<i<<endl; ????} ????cout<<"arry(int?_count)"<<endl; } arry::arry(const?arry&?arr){ ????m_pArr?=?new?int[m_iCount]; ????m_iCount?=?arr.m_iCount; ????//m_pArr?=?arr.m_pArr; ????for(int?i?=?0;i<m_iCount;i++){ ????????m_pArr[i]?=?arr.m_pArr[i]; ????} ????cout<<"arry(const?arry&?arr)"<<endl; } void?arry::?setCount(int?_count){ ????m_iCount?=?_count; } int?arry::?getCount(){ ????return?m_iCount; } void?arry::?printAddr(){ ????cout<<"m_pArr的值:"<<m_pArr<<endl; } void?arry::printarr(){ ????for(int?i?=?0;i<m_iCount;i++){ ????cout<<m_pArr[i]<<endl; ????} } arry::~arry() { ????delete?[]m_pArr; ????m_pArr?=?NULL; ????cout<<"~arry()"<<endl; ????//dtor } /***************demo.cpp******************/ #include<iostream> #include<stdlib.h> #include"arry.h" using?namespace?std; int?main(void){ ????arry?arr1(6); ????//arr1.setCount(6); ????arry?arr2?=?arr1; ????arr1.printAddr(); ????arr2.printAddr(); ????arr2.printarr(); ????system("pause"); ????return?0; }
查看全部
舉報