關(guān)于“C++面向?qū)ο蟾呒?jí)編程上”第二次作業(yè)

字符串(string)

class with pointer? members

string s3(s1);//拷貝構(gòu)造(copy ctor)s1到s3;

s3=s1;//拷貝賦值(copy op=);

String s2(s1);//以s1為藍(lán)本構(gòu)造s2。

三個(gè)特殊的函數(shù)(big three)

拷貝構(gòu)造函數(shù)

class string

{

public:

string( const char* cstr = 0 );//構(gòu)造函數(shù),如為空賦值為0

string( const String& str );//拷貝構(gòu)造函數(shù)

//首先考慮可以不以引用傳遞,不改傳進(jìn)來(lái)的可以用const

string& operator = ( const string& str );//重載運(yùn)算符" = ",實(shí)現(xiàn)拷貝賦值

~string();

char* get_c_str() const { return m_data; }

private:

char* m_data;

};

拷貝賦值函數(shù)

inline

string& string::operator=(const string& str)

{

if (this == &str)

return *this;//必須做檢查

delete[] m_data;

m_data = new char[ strlen(str.m_data)+];

strcpy(m_data,str.m_data);

return *this;

}

析構(gòu)函數(shù):調(diào)用析構(gòu)函數(shù)釋放空間

inline

String::~String()

{

delete[] m_data;

}

棧(stack),堆(heap)

stack存在于某個(gè)scope的一塊內(nèi)存空間。當(dāng)調(diào)用某函數(shù)時(shí),函數(shù)本身會(huì)形成一個(gè)stack來(lái)放置它所接收的參數(shù)、返回地址以及l(fā)ocal objects。

在函數(shù)本體(function body)內(nèi)聲明的任何變量,其所用的內(nèi)存塊都取自上述stack。

堆所謂system heap,是指由操作系統(tǒng)提供的一塊global內(nèi)存空間,程序可動(dòng)態(tài)分配從其中獲得若干區(qū)塊。

class complex

{ ... };

......

//對(duì)象C定義在任何作用域之外,因此是全局對(duì)象,作用域與static一樣是整個(gè)程序。

complex C( 1, 2 );

{

//c1所占空間來(lái)自棧,它在作用域結(jié)束后會(huì)被自動(dòng)清理,因此稱其為local object或auto object。

complex c1( 1, 2 );

//c2的生命在其scope結(jié)束之后依舊存在,直到整個(gè)程序結(jié)束。

static complex c2( 1, 2 );

//使用new新建對(duì)象時(shí),是先分配memory再調(diào)用ctor,在作用域結(jié)束后p依舊存在。

complex* p = new complex( 1, 2 );

//這里的單元由內(nèi)存動(dòng)態(tài)分配得來(lái),因此用戶有義務(wù)將其刪除。

delete p;

}

用new創(chuàng)建對(duì)象,.使用delete釋放內(nèi)存(防止內(nèi)存泄漏)

complex* pc = new complex( 1, 2 );

String* pc = new String( "Hello!" );

...

delete pc;

類模板

complex c1,c2,c3;//一份函數(shù)多個(gè)對(duì)象,靠this point識(shí)別

cout<

cout<



static data members(論創(chuàng)建多少個(gè)類的對(duì)象,靜態(tài)成員都只有一個(gè)副本。靜態(tài)成員在類的所有對(duì)象中是共享的。)

class A{

public:

static A& getinstance (return a;);

setup(){...}

private:

A();

A(const A& rhs);

static A a;

...

};

類模板:template(其他資料:http://www.jb51.net/article/53746.htm

template 是聲明類模板的關(guān)鍵字,表示聲明一個(gè)模板,模板參數(shù)可以是一個(gè),也可以是多個(gè),可以是類型參數(shù) ,也可以是非類型參數(shù)。類型參數(shù)由關(guān)鍵字class或typename及其后面的標(biāo)識(shí)符構(gòu)成。非類型參數(shù)由一個(gè)普通參數(shù)構(gòu)成,代表模板定義中的一個(gè)常量。

函數(shù)模板( Function templates)

函數(shù)模板可以用來(lái)創(chuàng)建一個(gè)通用的函數(shù),以支持多種不同的形參,避免重載函數(shù)的函數(shù)體重復(fù)設(shè)計(jì)。它的最大特點(diǎn)是把函數(shù)使用的數(shù)據(jù)類型作為參數(shù)。

函數(shù)模板的聲明形式為:

template

<返回類型><函數(shù)名>(參數(shù)表)

{

函數(shù)體

}

namespace std(所有東西被封鎖包裝在里面,)

怎么打開(kāi) (三種,第三種完整寫(xiě)出,如二cin)

using namespace;//(using directive)

using std::cout;//(using declaration)

std::cin<<...;

cout<<...;

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容