1樓:幻夢·人生
類a裡的成員,有m_pvt
const修飾函式之後,意思是不能夠修改m_pvt也就是不能將他指向其他的位置
m_pvt->push_back(1);
這行語句修改的是m_pvt裡面所存的位址所指向的空間並不修改m_pvt,所以不違反const原則就好像你宣告乙個int * const p = a;
你不能修改p的值,但是你可以修改*p的值。
2樓:齊霸王在江湖夢
const修飾函式之後,意思是不能夠修改m_pvt也就是不能將他指向其他的位置
m_pvt->push_back(1);
這行語句修改的是m_pvt裡面所存的位址所指向的空間並不修改m_pvt,所以不違反const原則就好像你宣告乙個int * const p = a;
你不能修改p的值,但是你可以修改*p的值。
3樓:senlern林
我記得應該是非const物件無法呼叫const函式吧,因為const函式說明不會修改呼叫它的物件裡面的東西。至於const函式呼叫什麼樣的函式沒影響吧~你再試試,自己做做實驗。希望您能幫到你~
4樓:匿名使用者
void f() const;
const 保證會不修改 m_pvt,但是*m_pvt就管不了了。*m_pvt不屬於a類成員
說出const型成員函式能不能呼叫非const成員函式。
5樓:
const函式中呼叫的非const函式可以修改類成員,
這樣你的const函式不就間接修改類成員了嗎?
c++明確規定const函式不可以修改類成員。
為什麼const物件只能呼叫const成員函式,而不能呼叫非const成員函式
6樓:仙戈雅
因為常物件那麼就意味著該物件的資料成員是不能修改的(除非使用mutable修飾的可變成員外),而那些非const成員函式存在修改資料成員的風險。so,c++要求只能呼叫const成員函式。
7樓:物理公司的
怎麼在const成員函式裡面呼叫非const成員函
8樓:
const函式與非const函式的呼叫規則
const物件預設呼叫const成員函式,非const物件預設呼叫非const成員函式;
若非const物件想呼叫const成員函式,則需要顯示的轉化,例如(const student&)obj.getage();
若const物件想呼叫非const成員函式,同理進行強制型別轉換const_cast < student&>(constobj).getage();(注意constobj一定要加括號)
當類中只有一種函式存在的情況
- 非const物件可以呼叫const成員函式或者非const成員函式
- const物件只能呼叫const成員函式,若直接呼叫非const成員函式編譯器會報錯。
不能通過指標變數呼叫物件中的非const成員?
9樓:風若遠去何人留
可以啊不管什麼成員 都可以用指標呼叫的。
可以說除了位域 任何的變數 任何的空間
都可以通過指標去呼叫。
只不過 要合法的呼叫成員變數
私有的 只能在成員函式中呼叫
public的 在任何函式中 都可以通過指標呼叫的。
在乙個類中,const成員函式可以呼叫另乙個const函式?非(const)成員函式之間...
10樓:匿名使用者
在類中,函式和函式之間的呼叫沒有什麼限制啊!即使是常量成員函式。你迷惑的應該是物件之間吧?
「不能從 const 成員函式返回指向類物件的普通引用。const 成員函式只能返回 *this 作為乙個 const 引用。」 ,「const 物件、指向 const 物件的指標或引用只能用於呼叫其const 成員函式,如果嘗試用它們來呼叫非 const 成員函式,則是錯誤的。
」也就是說常量成員函式對const物件、指向 const 物件的指標或引用有影響,函式之間沒有區別。
c++,const物件的成員不可修改,但const物件通過指標維護的物件卻可以修改,什麼意思?望高手予以指點!
11樓:匿名使用者
首先,const物件只能呼叫const成員函式是因為const函式不會改變成員物件,這點和const物件的本意是相同的,其他函式有可能會改變成員變數,所以編譯器拒絕通過呼叫非const函式
這裡的轉換是說,我另建立了乙個指標,而不是原來的東西,簡單的來說就是乙個copy,去掉了const屬性(當然真實情況下並不是真正的copy)
我覺得這裡用c風格的轉換,並不是很合適。如果換個風格可能更有助於你的理解
void test2()const
也就是說,轉換成了乙個非const的成員,c的轉換許可權太大,直接就把所有的東西都轉換了..這裡其實只轉換了const屬性,const_cast的功能在這裡就是:把常量指標被轉化成非常量的指標,並且仍然指向原來的物件。
12樓:匿名使用者
你所說的那個轉換是將指標指向當前類,這樣在靜態函式中就可以呼叫當前類的成員函式了。
13樓:匿名使用者
foo *temp = (foo*) this是將這個物件本身的記憶體位址賦給物件temp,*是取位址的意思。
還有const函式不可以呼叫非const函式,一定要通過物件才行。
14樓:匿名使用者
我知道了,謝謝提問者
C 引數中不加const為什麼會出錯
過載二維運算子的函式引數需要const,因為函式要保證實參的值不能被修改,需要加const限制,沒有為什麼,就是需要。另外你寫的函式宣告也有問題,應該是這樣 使用成員函式過載加號運算子 使用友元函式過載減號運算子 我個人習慣將 符號靠近變數名,而不是型別名,寫乙個例子你就明白了int p1,p2 p...
c中定義的類裡面的成員函式可以直接使用嗎?就
沒有物件的時候要訪問類成員函式的話,只能訪問靜態成員函式。例如 class a 這樣可以在主函式裡直接用 a abc 這樣的語句進行呼叫。如果是static函式,可以用類名 abc 來呼叫 如果不是static函式,不可以直接呼叫 不可以,唯一的例外是宣告成static 的成員函式可以 includ...
Python裡為什麼函式可以返回函式內部定義的函式
python中一切皆物件 2.函式是第一類物件 3.函式物件vs函式呼叫 4.閉包legb法則 所謂閉包,就是將組成函式的語句和這些語句的執行環境打包在一起時,得到的物件 python 裡為什麼函式可以返回乙個函式內部定義的函式 不是簡單地返回函式。至少在python裡,def定義的函式和lambd...