類的成員函式組成 C

2021-10-06 13:42:59 字數 3807 閱讀 3579

string

(void

)//預設無引數建構函式

string

(const string& str)

//預設拷貝建構函式

~string

(void);

//預設的析構函式

string &

operator=(

const string& str)

;//預設的賦值函式

// 宣告乙個類string如下

class

string

;

補充:c++中,變數的引用

int&  r = i;

double& s = d;

& 讀作引用。因此,第乙個宣告可以讀作 「r 是乙個初始化為 i 的整型引用」,第二個宣告可以讀作 「s 是乙個初始化為 d 的 double 型引用」。

class

line

;// 成員函式定義,包括建構函式

line::

line

(double len)

line::

line

(double len)

:length

(len)

// 上面的語法等同於如下語法:

line::

line

(double len)

拷貝建構函式是一種特殊的建構函式,拷貝建構函式的函式名與類名相同;

要求引數必須本型別的乙個引用變數,是否是const無限制;

// 類 string

string

(const string& others)

;// 形式1

string

(string& others)

;// 形式2

string

(string others)

;// 形式3

形式1是最常見的建構函式宣告,這也是最好的書寫方式;

形式2也是正確的,只是沒有const來保護形參;

形式3錯誤,編譯錯誤,因為會導致遞迴呼叫導致堆疊溢位,所以編譯器直接拒絕,vs中的報錯資訊為:error c2333: 「testclass::testclass」: 函式宣告中有錯誤;跳過函式體。

拷貝賦值函式的函式名是由關鍵字 operator 和 = 運算子符號構成;

對於返回值和引數型別沒有限制;

返回值可以為返回空、返回物件、返回物件的引用、返回常引用;

引數可以為物件、引用、常量引用。

// 類 testclass

testclass&

operator=(

const testclass&);

// 形式1

testclass&

operator

=(testclass&);

// 形式2

testclass&

operator

=(testclass)

;// 形式3

const testclass&

operator=(

const testclass&);

// 形式4

const testclass&

operator

=(testclass&);

// 形式5

const testclass&

operator

=(testclass)

;// 形式6

void

operator=(

const testclass&);

// 形式7

void

operator

=(testclass&);

// 形式8

void

operator

=(testclass)

;// 形式9

testclass operator=(

const testclass&);

// 形式10

testclass operator

=(testclass&);

// 形式11

testclass operator

=(testclass)

;// 形式12

形式1是最常見的拷貝賦值函式的宣告方式,也是最好的書寫方式;

其餘形式也都是正確的;

#include

using

namespace std;

// string類的宣告

class

string

;

// string類的定義

string::

~string

(void)}

string::

string

(const

char

* str)

//普通建構函式 str並非類的成員變數

else}

string::

string

(const string& other)

//拷貝建構函式

char

&string::

operator

(int index)

bool

operator==(

const string& s1,

const string& s2 )

string & string::

operator=(

const string & other)

delete

m_string;

//先釋放原來的記憶體

m_string =

newchar

[strlen

(other.m_string)+1

];strcpy

(m_string,other.m_string)

;return

*this;}

string & string::

operator+=

(const string & str)

string & string::

operator+(

const string & s1,

const string &s2)

ostream&

operator

<<

(ostream& out,string& s)

istream&

operator

>>

(istream& in,string& s)

int

main()

物件不存在,且沒用別的物件來初始化,就是呼叫了建構函式

物件不存在,且用別的物件來初始化,就是呼叫了拷貝建構函式

物件存在,用別的物件來給它賦值,就是呼叫了賦值函式

類的成員函式陣列

c 類的成員函式陣列宣告與使用與普通的函式陣列稍有不同 首先談談宣告 1.陣列宣告 int fun max len 包含max len個int型別元素的int型陣列 3.函式陣列 int fun max len int,int 函式指標陣列,與普通函式指標陣列相同 4.成員函式陣列 int clas...

c 類的成員函式

1 成員函式的宣告必須在類內,定義可以在類內或者類外。定義在類內部的函式隱式的為inline函式 非成員函式的宣告和定義都必須在類外。2 this指標 this指標是成員函式額外的隱式引數,this是乙個常量指標,不允許改變this中儲存的位址。預設情況下this的型別是指向類型別非常量版本的常量指...

C 類成員函式的儲存方式 C 類成員

對於類的大小,我們發現類內成員函式並不存在於類的儲存空間。這引發了我們的思考,類中的函式成員儲存在什麼地方?資料成員每個物件會有乙份,函式成員會不會也是這樣呢?include using namespace std class time private int hour int minute int...