字符串(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<<...;