c 中,如果建構函式沒有預設值,物件也沒有引數賦值過去,那

2021-05-14 08:16:18 字數 1925 閱讀 2815

1樓:影者東昇

不會的。

c++類的建構函式詳解

一、 建構函式是幹什麼的

class counter

private:

// 資料成員

int m_value;

}該類物件被建立時,編譯系統物件分配記憶體空間,並自動呼叫該建構函式->由建構函式完成成員的初始化工作

eg:    counter c1;

編譯系統為物件c1的每個資料成員(m_value)分配記憶體空間,並呼叫建構函式counter( )自動地初始化物件c1的m_value值設定為0

故:建構函式的作用:初始化物件的資料成員。

二、 建構函式的種類

class complex

//    一般建構函式(也稱過載建構函式)

// 一般建構函式可以有各種引數形式,一個類可以有多個一般建構函式,前提是引數的個數或者型別不同(基於c++的過載函式原理)

// 例如:你還可以寫一個 complex( int num)的建構函式出來

// 建立物件時根據傳入的引數不同呼叫不同的建構函式

complex(double real, double imag)

//    複製建構函式(也稱為拷貝建構函式)

//    複製建構函式引數為類物件本身的引用,用於根據一個已存在的物件複製出一個新的該類的物件,一般在函式中會將已存在物件的資料成員的值複製一份到新建立的物件中

//    若沒有顯示的寫複製建構函式,則系統會預設建立一個複製建構函式,但當類中有指標成員時,由系統預設建立該複製建構函式會存在風險,具體原因請查詢 有關 「淺拷貝」 、「深拷貝」的文章論述

complex(const complex & c)

// 型別轉換建構函式,根據一個指定的型別的物件建立一個本類的物件

// 例如:下面將根據一個double型別的物件建立了一個complex物件

complex::complex(double r)

// 等號運算子過載

// 注意,這個類似複製建構函式,將=右邊的本類物件的值複製給等號左邊的物件,它不屬於建構函式,等號左右兩邊的物件必須已經被建立

// 若沒有顯示的寫=運算子過載,則系統也會建立一個預設的=運算子過載,只做一些基本的拷貝工作

// 複製等號右邊的成員到左邊的物件中

this->m_real = rhs.m_real;

this->m_imag = rhs.m_imag;

// 把等號左邊的物件再次傳出

// 目的是為了支援連等 eg:    a=b=c 系統首先執行 b=c

// 然後執行 a= ( b=c的返回值,這裡應該是複製c值後的b物件)

return *this;}};

下面使用上面定義的類物件來說明各個建構函式的用法:

void main()

2樓:

我來告訴你吧,那個最佳答案就是瞎扯一些沒用的,你問的問題,分情況來看,如果你是在main函式中定義類的物件和呼叫建構函式肯定行不通,你自己用vc試試就知道了,而如果是在另一個類中定義,舉個簡單的例子class b

class a

這樣的話就可以直接對b類物件進行定義,只需在類a的建構函式中給b物件賦值就能用了。

c++中,如果建構函式沒有預設值,物件也沒有引數賦值過去,那麼定義類的物件,呼叫建構函式時會出錯嗎

3樓:匿名使用者

不會。建構函式是類的初始化。

即使沒有引數賦值過去,也會有預設值。

就如你定義

如果你寫int a=3;

a就被你初始化成3

但是如果你寫int a;

如果這時輸出a,就會輸出一個負數(如果不是全域性變數),類也同理

C 中函式預設值的問題,c 函式宣告裡面帶有預設值的小問題

函式中有多個預設引數,則形參應從最右邊依次向左設定。意思是,當第i 個引數有預設值時,第i 1,i 2,i 3 直到最後一個引數都必須 給預設值。否則語法錯。void point int x,int y 0,int z 0 對 void point int 0,int,int 0 錯 void po...

在C 中,帶預設值的函式是什麼來的?有什麼用?請舉個例子說明,謝謝

作用 1,一是用來設定預設形參的。2,二是對於擴充套件函式的通用性。例如 函式宣告 void fun 1 int i 呼叫 int a fun 1 a 如果對函式擴充套件為void fun 1 int i,int j 3 對於以前呼叫過的 不用再更新。否則就要寫成如下形式 int a,b fun 1...

基類某虛擬函式提供了預設值,在派生類中重新定義時能不能不提供預設值而使用基類的預設值

可以的bai.只需要du以無參方式呼叫基類zhi構造即可dao.比如內class base class a public base 這樣是完全可以的容.基類中宣告瞭虛擬函式後,派生類中對應的函式也必須宣告為虛擬函式 沒有虛擬函式,一定不能實現動態繫結的 前面那句錯了,派生類不必再宣告成虛擬函式了,只...