c 關於用類作為類中函式的引數問題

時間 2022-09-23 12:46:02

1樓:匿名使用者

求兩點間距離的公式用錯了,引數貌似也不對,建議改成這樣:

2樓:匿名使用者

double distance(mypoint point());

定義類內部的函式不需要構造物件,把point後面的括號去掉

double distance(mypoint point);

當然寫成更好

double mypoint::distance(class mypoint point())

這個去掉class,point後面的括號

double mypoint::distance(mypoint point)

同樣變成更好

3樓:匿名使用者

mypoint.h:

double distance(mypoint point());

改為doubledistance(mypoint point);

mypoint.cpp:

double mypoint::distance(class mypoint point())

改為doublemypoint::distance(mypoint point)

另外:這個方法的演算法不太對。

c++中關於物件作為函式形參的問題

4樓:heart浩皛

c++,類的物件作為形參時一定會呼叫複製建構函式嗎?答:如果引數是引用傳遞,則不會呼叫任何建構函式;如果是按值傳遞,則呼叫複製建構函式,按引數的值構造乙個臨時物件,這個臨時物件僅僅在函式執行是存在,函式執行結束之後呼叫析構函式。

如果類中沒有定義複製建構函式 那物件就不能作為形參?答:如果沒有定義,編譯器會自動為你定義乙個,編譯器自己定義的複製建構函式是按類成員變數的值複製的。

有幾個成員變數就重新建立乙個物件,那個物件的成員變數和被複製的物件其成員變數的值相同。這裡如果成員變數有指標的時候,就會出現多個指標指向同乙個物件的問題。

j**a 類成員變數作為函式引數的問題:

5樓:育知同創教育

private name name;

name是乙個name類。宣告name為name類。不是引用,是宣告person(name name)

name型別的name類為形參。

this.name=new name(a,b);

this指向class person。name是person類的全域性變數。在方法外宣告。

person.name=new name(a,b)開始使用name的構造方法來建立乙個name名稱的name類。

c++中物件作為函式引數傳遞的問題

6樓:夏冬琦

1.首先要明確void display(people x)是傳復值方式製傳參,實參要向形參複製物件,在複製物件時會呼叫拷貝建構函式。

2.由於people類中沒有顯式定義拷貝建構函式,將使用預設拷貝建構函式不會自動複製堆資源(即通過new得到的資源)。

3.因此void display(people x)執行時,會呼叫預設拷貝建構函式,所以x物件中的name屬性沒有賦值,指向了未知的位址,因此x.getname()會出錯。

解決的辦法有兩個:1.使用引用傳參,2.顯式定義拷貝建構函式。

c++自定義類的物件 做函式引數為什麼一定要用 引用傳值?

7樓:匿名使用者

函式引數有直接變數(如int、char、double等)型別、指標型別和引用型別。

如果引數是變數,傳遞方式是傳值,就是將實參的值複製(複製,意味著空間消耗和時間消耗)到「棧」空間中。

如果引數是指標,傳遞方式是傳址,需將指標複製(同樣也消耗空間和時間,對於陣列而言,只需儲存陣列首位址)到「棧」空間中。

如果是引用,則既不是傳值,也不是傳址,主調函式和被調函式共享引數的存放位址,與全域性變數共享方式相同。

對於拷貝(複製)建構函式而言,類物件通常需要較多的儲存空間,如果按值傳遞,必然會較大消耗「棧」空間,也需要較多的時間實施複製過程。因為複製建構函式不會修改引數的內容,也不會修改引數的屬性,所以建構函式的引數應該是常量引用傳遞,如

8樓:篤俠

不是一定要用引用。

由於物件一般都含有較多的資料成員,當其作為函式引數傳遞時,傳遞物件值的耗時要比傳遞物件位址耗時多,所以一般採用傳遞位址的方式。

使用指標也能傳遞位址,但c++引入了引用的概念之後,使用引用要比使用指標的可讀性好些。

有時,一些函式(包括拷貝建構函式)引數要求用(不是必須用)常引用,目的是為了避免函式體中無意地修改指標所指物件的值。

9樓:匿名使用者

如果引數是類物件,就是值傳遞,就要複製,複製就要調拷貝建構函式。這就形成了拷貝建構函式再調拷貝建構函式,無限遞迴下去。因此只能用引用的方法

10樓:匿名使用者

如果用傳值的方式的話會帶來拷貝的開銷

c++類成員函式能否以該類物件作為引數?

11樓:東風冷雪

void set(vector&); //這個是物件吧?在函式中形式引數是可以省略

變數名的,

比如 void change(int &,in &);

C 類型別指標陣列,C , 動態指標陣列作為類的成員,如何分配空間

c 不支援動態陣列,陣列在編譯時就已經被分配了記憶體,因此不能夠使用變數作為陣列定義時的大小。把private改為public,先定義乙個物件,再賦值 a obja header msg 0 ai header msg 1 vi header msg 2 oi pp p m 是錯的,陣列的長度必須為...

C關於類的繼承, C C 關於類的繼承

s2.methoda 錯誤,不能編譯通過 class sample2為私有繼承class sample,故私有繼承的原則是私有資料成員不能被直接訪問,公有資料成員可以被class sample2直接訪問,如要訪問methoda 則必須使用函式呼叫,不能直接用物件訪問私有成員!這是c 的原則!dad的...

在c 中關於列舉型別的問題,在c 中關於列舉型別的問題

按你的 ext double cconv mttimesecs 就等於 double stdcall mttimesecs 相當於定義了乙個mttimesecs的函式啊。關於c 列舉型別的宣告 enum weekday 則可以定義 weekday first first即為代表星期的變數 這個列舉,...

C 關於類的程式設計題目,C 類和物件 簡單程式設計題目

具體思路如下 順序 鍵盤 主機 顯示器 他們與計算機類的關係是has a的關係,也就是三者加上一些相關功能組成計算機類。對於這種型別,一般是把組成直接寫入類裡,例如 class computer int main 題目要求是編寫計算機類,那麼你就定義乙個計算機類,裡面包含三個函式,分別代表鍵盤 顯示...

c中基類引用指向繼承類的物件

嚴格來說,應該說兩塊,a佔4個位元組的空間,儲存的是到b的引用位址,另一塊就是堆上的b例項了,因為a是乙個引用位址,a.methoda 實值上執行的是堆上b例項的b.methoda 父親有的東西兒子可以繼承 反過來呢 自然不允許 程式設計也是如此!派生類可以引用基類的變數 而積累則不可以 也不是太絕...