C對於常物件和常成員函式的描述錯誤的是

2022-06-20 07:45:26 字數 4046 閱讀 1204

1樓:

c是錯的。因為常物件必須初始化,並且初始化後不能修改資料成員。常成員函式不能更新物件的資料,也不能呼叫非const修飾的成員函式。常物件只能呼叫類的常成員函式。

在 c++ 中,const 也可以用來修飾物件,稱為常物件。一旦將物件定義為常物件之後,就只能呼叫類的 const 成員(包括 const 成員變數和 const 成員函式)了。

定義常物件的語法和定義常量的語法類似:

const  class  object(params);

class const object(params);

當然也可以定義 const 指標:

const class *p = new class(params);

class const *p = new class(params);

2樓:你的側臉狠美

c因為常物件必須初始化,並且初始化後不能修改資料成員。

常成員函式不能更新物件的資料,也不能呼叫非const修飾的成員函式。常物件只能呼叫類的常成員函式。

3樓:匿名使用者

c常物件必須初始化,並且初始化後不能修改資料成員

在c++中對於常成員函式,下面描述正確的是( )。

4樓:匿名使用者

你的程式執行很正確,拷貝建構函式正常呼叫了,從cout<<"constructing copy of"<

1、先說你的結果沒有輸出1234檢查一下你的程式,你有哪行**的功能是輸出1234?

2、用途?當然是實現物件的複製,如果可以有a=b(當然這個可以在後面用過載運算子號做到,但畢竟物件不是普通變數)用於物件賦值,可能就沒有拷貝建構函式這一概念了,拷貝建構函式並不是非要有不可(本來有預設的),你這個程式有和沒有,區別不大,為什麼要寫拷貝建構函式,這個問題比較好,建意你查下資料,弄清深拷貝和淺拷貝這兩個概念,你就清楚了

3、能否用其它**代替?從這個簡單的程式上看,完全可以,功能是唯一的,但**不是唯一的,如果作為專業人士,這就是必須的了

其實這些問題,最終還是落在了物件的釋放,如何讓值在記憶體中不出錯,各有所用,該釋放時釋放,不該釋放,就絕不能提前釋放,用完後,作為專業程式設計師是有釋放記憶體這一說的

7. 對於常成員函式,下面描述正確的是_____ ____。 a.類的成員函式可以操作常物件 b.類的成員函式不能操作常

5樓:匿名使用者

我來告訴你吧,其實題描述可能有一些不太當清楚。但是考點你要清楚。

常成員函式:就是承諾不會改變成員函式的值的函式。因此,類的一般成員函式(沒有宣告為const的函式)一般來說都會嘗試對類的成員進行賦值操作。

因此,這樣類的成員函式,非const時,不應該能夠訪問類的const物件,這裡你應該明白什麼是類的const物件:

class a;

const a acls;

這裡的acls就是一個類的常物件,因此既然宣告為了常物件,因此其值應該都不能被改變,所以 ,a答案都是錯的,為什麼b也是錯的,因為對於類的常成員函式不會修改類的成員變數的值,因此常成員函式是可以操作類常物件的。b錯。

d是顯然錯的了,理由同上。

正確答案為c,如前面所說,常成員函式可以操作常物件,是因為其不會改變成員變數的值,因此不管是否為常物件,其都可以進行操作。

6樓:憶蕭

b,因為在c++中 函式如果被 const修飾的話,表示該函式對類的成員變數或者稱為屬性不做任何修改,只是簡單的使用而已

c++中,不是常物件能呼叫常成員函式嗎?

7樓:

當然能了.

別把const與static搞混了

有兩處錯了: 一是呼叫處,不能a.print() const;只能a.print();

第二個錯誤是你理解錯了, void print()和void print()const是兩個有點特殊的過載函式,因為呼叫都是a.print(),倒底呼叫哪個呢?看物件來, 若是常物件就呼叫void print()const, 否則就呼叫void print().

重釋答案: 不是常物件也能呼叫常成員函式, 但若常成員函式是過載的,那就只有常物件才能呼叫.比如你的例子.

a a;

a.print();//輸出aa

const a a;

a.print();//輸出bb

c++常成員函式與常量物件的訪問錯誤小問題

8樓:

#include

using namespace std;

class test

private:

int a;

};void main()

{這樣就可以了,不要亂用const

const 表示不修改成員變數,親

9樓:水晶扇

常函式只能修改類裡面的靜態變數。不允許修改普通成員變數。

你在int f(int s)

後面加了一個const,表示這函式是常函式(只能被常量物件或指標或引用呼叫。當然「非」常量變數編譯器允許自動轉換為常量,但是不能再轉為「非」常量。就算是「非」常量的物件呼叫這個函式,編譯器也會自動先轉換為常量物件的)。

請問常量物件是誰? 為什麼不能修改?

這裡其實還沒體現出常物件是誰,但是這個函式的宣告已經決定以後呼叫它的都是常物件(含指標型別和引用型別)

c++語言的程式,附答案 10

10樓:匿名使用者

c++模擬試卷(一)

一、單項選擇題(共20題,每題1分,共20分)1、下列關於c++識別符號的命名不合法的是a. pad b. name_1 c.

a#bc d. _a122、若有以下型別識別符號定義: ( )int x=2; char w='a'; float y=23.

45f; double z=45.6712;則表示式w*x+y-z的結果型別是a. float b.

char c. int d. double 3、若有int x=10,y=20,z=30; 則執行下面語句後,x的值是if(x>y)z=x; x=y; y=z; a.

10 b. 20 c. 30 d.

04、迴圈語句whlie(int i=0 )i--;的迴圈次數是a. 0 b. 1 c.

5 d. 無限5、一個函式無返回值時,應選擇的說明符是a. static b.

extern c. void d. 無說明符6、對過載函式形參的描述中,錯誤的是a.

引數的個數可能不同 b. 引數的型別可能不同c. 引數的順序可能不同 d.

引數的個數、型別、順序都相同,只是函式的返回值型別不同7、以下能正確定義陣列並正確賦初值的語句是a. int n=5,b[n][n]; b. int a[2]=,,,};c.

int c[2]=,}; d. int d[3][2]=,};8、下列給字元陣列進行的初始化中,不正確的是a. char s1="abcd"; b.

char s2[3]=;c. char s3=; d. char s4[6]=;9、通常的拷貝建構函式的引數是a. 某個物件名 b.某個物件成員名c. 某個物件的引用 d.某個物件的指標名10、關於建構函式特點的描述中,錯誤的是a.

定義建構函式必須指出型別 b. 建構函式的名字與該類的類名相同c. 一個類中可定義0至多個建構函式 d.

建構函式是一種成員函式11、下面程式的執行結果為<=n;i++) if(b[i]%2==0) b[++j]=b[i];for(i=1;i<=j;i++) cout

c 中空指標物件訪問成員問題,c 中空指標物件訪問成員問題

這與類名呼叫函式是一樣的 與物件無關 哦 錯了 只有靜態函式才可以 好像是這樣 主動使用一個類時,類就會載入到記憶體中 包括類的靜態成員,和方法 靜態和非靜態都會載入 如此,我們宣告一個類指標時,類就會被載入 所以即使是一個空指標,但訪問的是類的方法。引用smile5201314y的回答 pbase...

常吃豬皮的好處和壞處 常吃豬皮有什麼好處和壞處

1 常吃豬皮的好處。1 美容養顏 豬皮富含一定量的膠原蛋白,而膠原蛋白是構成 內彈性物質的重要原料,因此適當吃豬皮,能夠讓 變得更加富有彈性 紅潤 白皙,因此有著美容養顏的好處 2 緩解疲勞 豬皮富含一定量的脂肪,而每1g脂肪能夠產生9000卡的熱量,因此適當吃豬皮,補充恰當脂肪的含量,提供能量,在...

關於數列前幾項和的簡單c語言問題5自然常數ee可以用級數

include stdio.h int main int argc,char argv for e t 1.0,i 1 i n e t i printf e 權 8f n e return 0 c語言 利用泰勒級數e 1 1 1 1 2 1 n include int main return 0 f...