-
13245
查看全部 -
對(duì)象各自的this指針指向各自對(duì)象的首地址,所以不同對(duì)象的this指針一定指向不同的內(nèi)存地址
查看全部 -
const 主要的作用?
固定常數(shù)據(jù)成員?
查看全部 -
定義對(duì)象引用時(shí),直接賦值
定義對(duì)象指針時(shí),要取地址
加了const實(shí)際上是改變了權(quán)限,只讀權(quán)限
查看全部 -
const 修飾基本類型,同#define
const修飾對(duì)象,通過初始化列表初始化
const修飾成員函數(shù),隱含參數(shù)this,故不能修改數(shù)據(jù)成員
同名的有無const修飾的兩個(gè)函數(shù),互為重載,但是一般沒必要
使用常對(duì)象調(diào)用的是常成員函數(shù)
查看全部 -
如果想要返回原來的值,而非新值,使用引用&查看全部
-
淺拷貝存在的問題:
? ? 當(dāng)對(duì)象的數(shù)據(jù)成員中包含指針變量時(shí),淺拷貝有可能出現(xiàn)兩個(gè)指針指向同一塊內(nèi)存區(qū)域的現(xiàn)象,這會(huì)導(dǎo)致對(duì)兩個(gè)對(duì)象的寫操作被覆蓋,甚至可能會(huì)出現(xiàn)同一塊內(nèi)存被釋放兩次的情況,造成系統(tǒng)崩潰。
查看全部 -
Coordinate * const pCoor = &coor1 : 這種方式定義的常指針“只能指向coor1,但可以調(diào)用coor1的不同的函數(shù)”;(擁有讀寫權(quán)限) const Coordinate *pCoor = &coor1 ?: 只能調(diào)用coor1的“常成員函數(shù)”。(只擁有讀權(quán)限)
常對(duì)象引用與常對(duì)象指針?
const Coordinate& coor2 ; const Coordinate *p; 只具有讀權(quán)限,所以只能調(diào)用常成員函數(shù)。調(diào)用成員函數(shù)過程其實(shí)就是一個(gè)隱式的this指針,普通成員函數(shù)傳遞的是Coordinate *this指針,而常成員函數(shù)傳遞的是常指針const Coordinate *this(只具有讀權(quán)限)。 注意,Coordinate * const p,該指針表明指針地址為常量,指針?biāo)赶虻膶?duì)象值是可以改變的,也就是說該指針具有讀寫權(quán)限
查看全部 -
用const修飾對(duì)象成員,對(duì)象成員就變成了常對(duì)象成員 用const修飾成員函數(shù),成員函數(shù)就變成了常成員函數(shù)。const要放在函數(shù)的最后, 一旦初始化就不能再修改,const就是干這個(gè)的,長(zhǎng)對(duì)象成員用初始化列表初始化 函數(shù)里看著沒有參數(shù),實(shí)際上隱藏著this指針。常成員函數(shù)中隱藏的是常this指針,常指針指向的數(shù)據(jù)不允許被修改 例如: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;的寫法是錯(cuò)誤的,this已經(jīng)是常指針,通過常指針是無法修改值的 void changeX();與void changeX() const互為重載 要調(diào)用const修飾的常成員函數(shù),實(shí)例化對(duì)象時(shí),必須用const來修飾對(duì)象,const寫在最前面
查看全部 -
1、 Array ... return *this 相當(dāng)于: Array arrX = arr1; arrX是一個(gè)新的對(duì)象。即返回的this指針為另一個(gè)臨時(shí)對(duì)象 2、 Array& ... return *this 相當(dāng)于: Array & arrX = arr1; 此時(shí)arrX是arr1的別名。 3、 Array* ... return this 相當(dāng)于: Array* arrX = this; 此時(shí)arrX的值 是地址,且是指向arr1的。用->訪問或者*p. 訪問
查看全部 -
1.對(duì)象成員指針可以在初始化列表中初始化也可以在構(gòu)造函數(shù)中初始化。
查看全部 -
對(duì)象指針:類名 * 指針名 ?= new 類名
查看全部 -
1.對(duì)象成員:
對(duì)于復(fù)合類來說,子類的構(gòu)造函數(shù)中如果存在參數(shù),那么母類必須通過初始化列表的形式來對(duì)母類對(duì)象中的子類對(duì)象進(jìn)行賦值。如圖中的坐標(biāo)系類
查看全部 -
/****************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就是一個(gè)對(duì)象 } /****************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; }
查看全部
舉報(bào)