string
(void
)//預設無引數建構函式
string
(const string& str)
//預設拷貝建構函式
~string
(void);
//預設的析構函式
string &
operator=(
const string& str)
;//預設的賦值函式
// 宣告乙個類string如下
class
string
;
補充:c++中,變數的引用& 讀作引用。因此,第乙個宣告可以讀作 「r 是乙個初始化為 i 的整型引用」,第二個宣告可以讀作 「s 是乙個初始化為 d 的 double 型引用」。int& r = i;
double& s = d;
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是最常見的建構函式宣告,這也是最好的書寫方式;拷貝賦值函式的函式名是由關鍵字 operator 和 = 運算子符號構成;形式2也是正確的,只是沒有const來保護形參;
形式3錯誤,編譯錯誤,因為會導致遞迴呼叫導致堆疊溢位,所以編譯器直接拒絕,vs中的報錯資訊為:error c2333: 「testclass::testclass」: 函式宣告中有錯誤;跳過函式體。
對於返回值和引數型別沒有限制;
返回值可以為返回空、返回物件、返回物件的引用、返回常引用;
引數可以為物件、引用、常量引用。
// 類 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...