C 的作業,挺簡單的,目的是讓我們了解建構函式,但我寫的怎麼會有錯誤

2022-03-12 06:39:53 字數 5054 閱讀 4516

1樓:匿名使用者

lz 你的printf() 是你沒定義還是你沒給出,函式內容是什麼,我們都不知道, 無法給你完整的解釋。

而且你這樣直接使用printf作為函式名相當於過載了系統函式printf,如果該函式沒有什麼特別意義, 不推薦使用該函式名

關於你的b種的成員變數, 由於你未給成員變數賦值就輸出, 給出的結果將會是乙個不定值,原因是對c++中的變數,系統是不會自動將其自動初始化為0或者null。

2樓:匿名使用者

**中問題:

1。包含iostream.但是不能直接使用cout等,你需要說明命名空間,加上using namespace std;就ok了。

2。printf()函式沒有宣告。你可以過載此函式,輸出name和id,但是建議不要這麼做。

3。定義建構函式的時候,應該給資料初始化。如:student()包含上面1和2,程式就可以執行了。你可以試一試。

你問的問題:b.printf()在b沒有初始化時輸出值不確定。

3樓:匿名使用者

#include

#include

using namespace std;

class student

student::student(char *name, int id)

int student::getid( )char *student::getname()void student::printf() //你這個方法沒有實現int main()

4樓:

你沒有寫void printf();的定義,僅僅宣告了。

你是要輸出name和id吧?

沒初始化,b的name為空,id為0.

5樓:冉易雲

你的 student 類中沒有關於 printf()函式的定義,所以無法呼叫。生成可執行**的時候會報錯,故需在類中新增printf()函式定義。

至於你所說的b沒有初始化,輸出結果不定,一般定義完之後(student b;)立刻使用,結果b相應物件的值為0x00,如果在其他地方呼叫的話,其相應物件的值就不為0x00啦(自己可以測試一下)

6樓:匿名使用者

void printf();

你這句有問題吧,汗,用c的printf作函式名???

c++ 類的構造後出現no matching function for call to,怎樣解決?

7樓:大野瘦子

沒有給time1編寫預設建構函式,在類的定義裡加一句time1():hour(0),minute(0),second(0){}

int main()

//class time1

public:

time1(); //加一行 然後再cpp中寫實現

time1( time_t);

void settime(int ,int ,int );

void printfuniversal();

private:

int hour;

int minute;

int second;

注意事項

建構函式的名稱與類的名稱是完全相同的,並且不會返回任何型別,也不會返回 void。建構函式可用於為某些成員變數設定初始值。

建構函式的格式為:

()為類的名字

為引數列表

在類建立的時候,都會呼叫建構函式,但是有的時候不寫自己的建構函式的話, 系統會呼叫預設的建構函式 (也就是什麼都不做),但是當寫了建構函式後, 系統就不會呼叫預設的建構函式,建構函式的宣告必須寫在類中, 但是實現可以寫在外頭 (如果不知道如何將成員函式外部實現的看這裡):

class student

string name;

public:

student(string)

student::student(string name)

this->name=name;//這裡可以直接訪問類的成員

備註: 在第9行用到了 this 指標

這樣一來, 在宣告類的時候, 可以呼叫建構函式, 其格式為:

變數名()

指該類的建構函式的引數列表

建構函式必須這樣寫, 不得寫在宣告後的其餘地方

#include

#include

using namespace std;

class student

string name;

public:

student(string);

string getname();

student::student(string name)

this->name=name;

string student::getname()

return name;

int main()

student s;

s.student("tweechalice");//error!!!

cout<

8樓:小鑫聊兩性

int main()

//***************====class time1;

9樓:9527壞蛋

很明顯建構函式需要引數,而time1 t1;又沒有引數,所以報錯了

乙個簡單的c++程式,幫幫小弟看下為什麼這個輸出會有兩個析構函式但是卻只有乙個建構函式?

10樓:黃萱

因為你定義的c是用b初始化的,但你在類中又沒有自定義使用類b為引數的建構函式,程式呼叫預設建構函式對c進行初始化,當然你的程式不會顯示出c的構造過程。

改成如下程式就能看出來了:

class b

{public:

b(){x=0;cout<<"呼叫預設建構函式!"<輸出如下:

呼叫預設建構函式!

x=0呼叫自定義的拷貝建構函式

x=0呼叫預設析構函式!

呼叫預設析構函式!

請按任意鍵繼續. . .

不懂請追問,望採納

11樓:匿名使用者

因為b c(b)呼叫的是帶參的拷貝建構函式,引數是該類的乙個引用,原型類似b(const b& b)。若沒有,預設系統會自動生成乙個,行為是對資料成員直接賦值操作,這樣是為什麼對於有指標成員的類必須自己寫拷貝建構函式,因為直接賦值指標會造成操作錯誤。

12樓:匿名使用者

因為 b c(b);這一句呼叫的是預設的複製建構函式,是編譯自動生成的。

你可以加上這一句就明白了

b(b&b)

13樓:匿名使用者

b c(b); 呼叫的是拷貝構造,你沒有寫,所以就呼叫了預設拷貝建構函式

c++建構函式初始化問題,新手不懂啊

14樓:匿名使用者

建立類的例項時,先為變數分配記憶體,然後呼叫建構函式,建構函式裡面又用到其他函式對變數賦值,就完成初始化了

15樓:

簡單點說:先建乙個類,裡面有各種引數和一些函式,其中有建構函式。當你想建立這個類下的乙個物件的時候,就呼叫建構函式給這個物件的一些引數賦值,等等(即初始化)。

也就是說先建好了建構函式,但是在用的的時候(建立該類物件)才呼叫(程式自動完成)。

16樓:匿名使用者

任何乙個類,你要呼叫的時候,都會首先進行初始化class a;

呼叫 a

a a;

初始化的過程最開始就是跑a類的 建構函式,於是乎在建構函式的賦值就第一時間完成了。

17樓:匿名使用者

當你新建乙個物件時,gradebook a;或者gradebook a("abc");編譯器就會自動呼叫建構函式進行初始化。前者是系統預設的,當你未定義建構函式時,系統就呼叫預設的建構函式:gradebook() ;後者則是呼叫你自己建立的建構函式。

你可以利用過載建立n個不同的建構函式。

建構函式是新建物件時必然觸發的,不能自己控制何時使用,或者不用建構函式。

建構函式比賦值函式好,因為任何物件建立時不給於初始化,就是一種安全隱患,比你先建立再賦值要好多了。

建構函式目的在於初始化,所以寫建構函式時盡量簡單,不要把多餘的功能寫進裡面,不然會造成過於複雜,影響程式可讀性。

你的建構函式裡,簡單呼叫了乙個set方法來進行初始化,這樣有幾個好處:

1、使用類內建的方法更安全,不會影響到整個建構函式。比如我類有2個成員:string name,int no;

gradebook(string name,int no)

如果我不僅要設定name還要有其他的功能(跟name有關)就可以直接修改,setname方法不必影響到no的初始化,整個建構函式也沒有其他影響

2、通過呼叫set方法來賦值,使得程式結構更清晰,一看就知道這段程式什麼意思。

不過缺點就是太繁瑣,一般直接賦值,或者c++的方法

gradebook(string name,int no):name(name),no(no){}

用這種set方法整理程式結構是重構的常用方法,不過一般建構函式中不常用。

gradebook(const string& name,const int& no):name(name),no(no){}

18樓:匿名使用者

首先,沒乙個類都必須有建構函式,就是告訴計算機怎麼生成這個類的物件。

如果你不定義建構函式,編譯器會給你個預設的。

例如定義類 myclass,其預設的建構函式為myclass();

建構函式也是可以過載的,即你可以定義好多的建構函式,如myclass(int),myclass(string),myclass(myclass *) ……

這樣做的意思就是,你可以告訴計算機,我定義的這個類有好多好多的構造方式。而且,當你後期回頭再維護**,或是你在寫到系統的其他地方時,發現之前定義的建構函式可能不太方便,那麼你可以再重新的定義乙個新的,這樣不會影響現有**。

老師讓我們放學後的家庭作業是 先有雞還是先有蛋,你們誰知道請告訴我

當時生物老師告訴我們的答案是!雞和蛋同時出現在地球的,科學界一直有爭議 物種進化來的不可能先出現蛋,一定是先出現恐龍 先有蛋,後有雞,有科學依據。蛋是變異加進化生成的,然後溫度適宜時,小雞就孵出來了 你去問問老師正確答案 我認為是先有蛋。這個問題一直以來被大家困擾,現在我說說我的理由。我們上初中的時...

讓我們揩手同進,唱出愛的歌是哪首歌

不是 揩手 是 攜手 讓我們攜手同行唱出愛的歌 是歌曲 一首醉人的歌 中的歌詞。一首醉人的歌 作詞 輕雲望月 作曲 輕雲望月 演唱 雨柔 望海高歌 一首醉人的歌 歌詞 風吹來的時候 飄過一首溫馨的歌 那麼悠揚陶醉著我 歌裡有你的真情 歌裡有我的快樂 它交匯成一條一條愛的河 雨滑落的地方 迴盪一首醉人...

孟子的《寡人之於國也》讓我們明白了什麼道理寫作文

孟子是繼孔子之後儒家學派最有聲望的大師。他的學說的核心就是要講 仁義 行 仁政 即實行所謂 王道 其理論基礎就是民本思想,重視人的生存權利。因此孟子對那些不行仁政,殘酷掠奪百姓的封建王侯深惡痛絕。寡人之於國也 就辛辣地嘲諷了以賢君自居的梁惠王,並憤怒地指出一些封建王侯自詡 為民父母 可實際上卻 率獸...