c初學建構函式有幾個問題想請教請教

2022-05-16 01:15:33 字數 4551 閱讀 3164

1樓:匿名使用者

1.shape* shape=new shape();是在堆中建立一個shape類的物件,new shape()會返回建立的這個物件的地址,而shape* shape=是將=右邊返回的地址賦值給指標變數shape。

2.這裡一定要用動態分配儲存嗎?可以不用嗎?

可以不用動態分配儲存,像這樣建立物件並呼叫方法:

//呼叫無參建構函式

shape sh1;

//呼叫有參建構函式

shape sh2(4,4);

sh1.setedge(4);

sh1.setangle(4);

sh1.draw();

3.曲線劃的地方 用shape指標變數訪問setedge setangle有什麼意義?去掉shape->有什麼影響嗎?

這些都是呼叫指標指向的物件的某個方法,不能去掉shape->,否則是語法錯誤,但也可以用老的語法來呼叫指標指向的物件的方法,如:

shape->setedge(4);

等同於(*shape).setedge(4);

4.為什麼是return 1;?

就本程式而言,返回什麼關係不大,只要是一個整數就行了。

2樓:最大的寶寶

1.這是建立類物件,shape()表示呼叫預設建構函式。所謂預設,指這個無參,也無返回值的特殊函式。

例子中還有一個同名的,但帶有引數的建構函式。之後,shape就指向一個已經初始化好的shape物件,就可以正常呼叫類中包含的公有成員了。

2.不用new也是可以的,如shape shape = shape()。此時shape不再是指向shape物件的指標,而直接是一個shape物件。

訪問類成員時改用點號(.)而不是指標(->)。

3.要想呼叫類的成員,首先需要告訴編譯器怎麼找到記憶體中的類物件。因為在記憶體中可能同時存在多個同類的物件,所以使用shape指標就是告訴編譯器,通過我來找到一個特定的類物件及其它包含的成員。

而用shape1就可以訪問另一個類物件。這裡的指標和c語言的指標用法是一樣的,只是類有public等許可權,不是每一個成員都允許呼叫。

4.一般不需要關注主函式的返回值,在一些遺留**裡甚至直接把它定義為void,但它並非一無是處。主函式的返回值,可用於指令碼呼叫中,如win之下的批處理,根據返回值作出不同的對應

3樓:匿名使用者

shape* shape =new shape();//宣告一個指向shape類的指標,指向一個新的shape類物件;shape()是shape的建構函式,返回的結果是一個新的shape類物件;new是為這個物件開闢空間,使這個物件從臨時的變成和當前方法的生命週期相同;new shape()是新建一個shape類物件的意思,一般都這麼寫,不必深究

可以不用,可以直接shape shape;但是這樣這個物件就會在函式結束時釋放,而且呼叫類裡面物件時要用.而不是用->了

setangle是shape裡面的一個方法,shape->setangle()表示呼叫shape物件的setangle()方法,shape ->是區分物件用的,如果有兩個物件shape1,shape2,你再想想為什麼要加吧

沒為什麼

4樓:白葉澤

首先這哪是建構函式啊,這明明就是類啊,沒深入學習c++的面對物件程式設計,水平就這樣吧。

1、shape *shape=new shape();動態建立物件//shape是類

相當於int i;只是它是你自己構造的類,以及,你動態建立的物件

2、用new運算子就是動態建立物件

3、呼叫函式,你仔細看,shape類裡面的setedge函式。該怎麼解釋呢,就是把shape的成員變數edge賦值為4,你試試刪除前cout

4,return 0  代表程式正常退出,return 1代表程式異常退出。

小弟是c/c++的初學者,有兩個問題想請教一下,急急急~~

5樓:匿名使用者

zhykzhykzhyk 見諒,小修改一下void reverse_string(char *str)}#include

#include

int pick_letter(char *file_a, char *file_b)

6樓:匿名使用者

void reverse_string(char *str)}#include

#include

int pick_letter(char *file_a, char *file_b)

7樓:匿名使用者

what question do you want ask?你要提什麼問啊

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

8樓:匿名使用者

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

9樓:百度網友

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

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

10樓:匿名使用者

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

呼叫 a

a a;

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

11樓:匿名使用者

當你新建一個物件時,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){}

12樓:匿名使用者

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

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

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

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

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

請教初學c++的基本知識。

13樓:匿名使用者

找本中文書看,任何一本中文書都可以。其實差不了什麼東西。但一定要是stdc++。

c++裡真正的精髓(物件導向,多型等等)不是課上會講的,也是教師們講不清楚的。需要你實際接觸過一些程式設計的哲學之後才能理解並靈活的運用。

兩本書硬選一本的話,推薦薄的那本,中文的那本。讓你更能理解的那本。

我學c++的路徑是與自由軟體運動分不開的。如果想理解好c++的話建議學學計算機程式設計發展的歷史。 語言的設計實際上就是為了滿足他們的程式設計需求而誕生的。

c++由幾項比較重要的部份組成:

基本c語言,物件導向設計,模板超程式設計,大學課程裡講得基本上是第一項的全部和第二想的一點概念而已

到後期基本上看書已經沒用了,都是上網查了,尤其是模板超程式設計的部分。

14樓:匿名使用者

我覺得光看教材沒用的,一定的一邊看自己一邊試著編寫一些程式,在電腦裡多弄弄就好了。。。而且最好先別去看太複雜的,你沒有什麼基礎,免得一下就把自己看暈了。。

15樓:匿名使用者

c++ primer