嵌入式學(xué)習(xí)(十四)

一妥衣、友元(friend)

所謂友元幽钢,就是給別人開權(quán)限用的赎婚,允許自己的朋友來訪問自己類中所有權(quán)限下的成員康辑,包括私有成員

友元包括友元函數(shù)和友元類

1.1 友元函數(shù)

1> 普通的類的非成員函數(shù),是無權(quán)訪問類中的受保護(hù)成員以及私有成員的郑趁,但是刊驴,將一個函數(shù)設(shè)置成友元函數(shù),那么該函數(shù)可以訪問該類中的所有權(quán)限下的成員寡润,

2> 友元函數(shù)分為全局函數(shù)作為友元函數(shù)和其他類的成員函數(shù)作為友元函數(shù)

3> 全局函數(shù)作為友元函數(shù)格式:在類內(nèi)進(jìn)行全局函數(shù)的聲明:friend? 函數(shù)頭捆憎;

#include <iostream>

using namespace std;

class Stu;? ? ? ? ? ? //對類的前置聲明

void fun(Stu &s);? ? ? ? ? ? //將函數(shù)進(jìn)行前置聲明

class Stu

{

private:

? ? string name;

? ? int age;

? ? double score;

public:

? ? Stu() {}

? ? Stu(string n, int a, double s):name(n),age(a),score(s) {}

? ? //類中的成員函數(shù),可以直接使用所有權(quán)限下的成員

? ? void show()

? ? {

? ? ? ? cout<<"name = "<<name<<"? age = "<<age<<"? score = "<<score<<endl;

? ? }

? ? //將全局函數(shù)聲明成友元函數(shù),那么該全局函數(shù)可以訪問該類中的所有權(quán)限下的成員

? ? friend void fun(Stu &s);

};

//定義一個全局函數(shù)

void fun(Stu &s)

{

? ? cout<<"name = "<<s.name<<"? age = "<<s.age<<"? score = "<<s.score<<endl;

}

int main()

{

? ? Stu s("zhangpp", 18, 90);

? ? fun(s);

? ? return 0;

}

練習(xí):定義一個貓類(Cat)和一個狗類(Dog)梭纹,分別有私有成員:個數(shù)(count)躲惰、重量(wight)

成員函數(shù):有參構(gòu)造

分別實例化一個貓的對象和狗的對象,調(diào)用一個全局函數(shù)变抽,在全局函數(shù)中础拨,輸出貓和狗的總個數(shù)和總重量

#include <iostream>

using namespace std;

class Dog;? ? ? ? ? ? //將類進(jìn)行前置聲明

class Cat

{

private:

? ? int count;

? ? double weight;

public:

? ? Cat(int a,double b):count(a),weight(b)

? ? {

? ? ? ? cout<<"有參構(gòu)造"<<endl;

? ? }

? ? friend void fun(Cat &c,Dog &d);? ? ? ? ? ? //將全局函數(shù)設(shè)置成友元函數(shù)

};

class Dog

{

private:

? ? int count;

? ? double weight;

public:

? ? Dog(int a,double b):count(a),weight(b)

? ? {

? ? ? ? cout<<"有參構(gòu)造"<<endl;

? ? }

? ? friend void fun(Cat &c,Dog &d);

};

//定義全局函數(shù),由于是友元函數(shù)绍载,可以調(diào)用類中的私有屬性

void fun(Cat &c,Dog &d)

{

? ? cout<<"總個數(shù)wei:"<<c.count+d.count<<endl;

? ? cout<<"總重量為:"<<c.weight+d.weight<<endl;

}

int main()

{

? ? Cat c(2,5.2);

? ? Dog d(2,9.3);

? ? fun(c,d);

? ? return 0;

}

4> 其他類的成員函數(shù)作為友元函數(shù)诡宗,聲明格式:friend 其他類::函數(shù)名(形參列表);

1.2 友元類

將一個類聲明成友元類,那么就運行這個類中的所有成員函數(shù)來訪問自己類中的私有成員了

#include <iostream>

using namespace std;

class Stu;? ? ? ? ? ? //對類的前置聲明

void fun(Stu &s);? ? ? ? ? ? //將函數(shù)進(jìn)行前置聲明

class Teacher

{

private:

? ? string name;

? ? string subject;? ? ? ? ? //科目

public:

? ? Teacher() {}

? ? Teacher(string n, string s):name(n), subject(s) {}

? ? void display(Stu &s);? ? ? ? ? ? //類內(nèi)聲明击儡,類外定義

};

class Stu

{

private:

? ? string name;

? ? int age;

? ? double score;

public:

? ? Stu() {}

? ? Stu(string n, int a, double s):name(n),age(a),score(s) {}

? ? //類中的成員函數(shù)塔沃,可以直接使用所有權(quán)限下的成員

? ? void show()

? ? {

? ? ? ? cout<<"name = "<<name<<"? age = "<<age<<"? score = "<<score<<endl;

? ? }

? ? //將全局函數(shù)聲明成友元函數(shù),那么該全局函數(shù)可以訪問該類中的所有權(quán)限下的成員

? ? friend void fun(Stu &s);

? ? //將老師類中的成員函數(shù)設(shè)置成友元函數(shù)

? ? //friend void Teacher::display(Stu &s);

? ? //將整個老師類都聲明成友元類

? ? friend class Teacher;

};

//定義一個全局函數(shù)

void fun(Stu &s)

{

? ? cout<<"name = "<<s.name<<"? age = "<<s.age<<"? score = "<<s.score<<endl;

}

//將老師類中的成員函數(shù)類外定義

void Teacher::display(Stu &s)

{

? ? cout<<"my_name = "<<name<<endl;

? ? cout<<"my_subject = "<<subject<<endl;

? ? cout<<"stu_name = "<<s.name<<endl;

}

int main()

{

? ? Stu s("zhangpp", 18, 90);

? ? fun(s);

? ? Teacher t("zhansan", "C++");

? ? t.display(s);

? ? return 0;

}

1.3 友元的總結(jié)

1> 友元是單向的,A將B設(shè)置成友元阳谍,則A允許B訪問自己的成員蛀柴,而B不一定允許A訪問其成員

2> 友元不具有傳遞性:A是B的朋友,B是C的朋友边坤,那么A不一定是C的朋友

3> 友元不具有繼承性:父類的朋友不一定是子類的朋友

4> 友元破壞了類的封裝性名扛,使得訪問權(quán)限形同虛設(shè),所以不在萬不得已的情況下茧痒,盡可能不使用友元

5> 必須使用友元的情況:插入和提取運算符重載時肮韧,需要使用全局函數(shù)作為友元函數(shù)(后面講)

二、常成員(const)

程序員有時在是定義類中的函數(shù)或者定義類對象時旺订,需要對成員變量進(jìn)行相關(guān)保護(hù)弄企,讓其在該調(diào)用中不被修改,那么就引入的常成員函數(shù)和常對象

2.1 常成員函數(shù)

1> 在定義成員函數(shù)后区拳,加關(guān)鍵字const拘领,那么該函數(shù)就是常成員函數(shù)

2> 在常成員函數(shù)中,不能修改成員變量的值樱调,保護(hù)成員變量不被修改约素,但是可以使用成員變量

3> 常成員函數(shù)和同名的非常成員函數(shù)届良,即使參數(shù)種類和個數(shù)等同,也構(gòu)成重載關(guān)系圣猎,原因是this指針的類型不同

非常成員函數(shù)中this:? 類名? * const this;

常成員函數(shù)中this:const 類名? * const this;

4> 非常對象士葫,調(diào)用成員函數(shù)時,優(yōu)先調(diào)用非常成員函數(shù)送悔,如果沒有非常成員函數(shù)慢显,那么就調(diào)用同名的常成員函數(shù)

2.2 常對象

1> 定義對象時,加關(guān)鍵字const: const 類名 對象名欠啤;

2> 常對象只能調(diào)用常成員函數(shù)荚藻,不能調(diào)用非常成員函數(shù)

2.3 mutable關(guān)鍵字

該關(guān)鍵字可以修飾類中的成員變量,表示該變量可以在成員函數(shù)中被修改

#include <iostream>

using namespace std;

class Stu

{

private:

? ? string name;

? ? mutable int age;? ? ? ? ? ? //由mutable修飾的成員變量洁段,可以在常成員函數(shù)中被修改

? ? double score;

public:

? ? Stu() {}

? ? Stu(string n, int a, double s):name(n),age(a),score(s) {}

? ? //類中的成員函數(shù)应狱,可以直接使用所有權(quán)限下的成員

? ? void show()const? ? ? ? ? ? //this原型:const 類名? * const this;

? ? {

? ? ? ? //this->score = 100;? ? ? ? ? ? ? //更改成員變量的值

? ? ? ? this->age = 16;? ? ? ? ? ? //由于該成員變量由mutable修飾,取消了其常屬性

? ? ? ? cout<<"name = "<<name<<"? age = "<<age<<"? score = "<<this->score<<endl;

? ? }

? ? //定義同名的非常成員函數(shù)

? ? void show()? ? ? ? ? ? ? ? ? //this原型:類名? * const this;

? ? {

? ? ? ? this->score = 100;? ? ? ? ? ? ? //更改成員變量的值

? ? ? ? cout<<"name = "<<name<<"? age = "<<age<<"? score = "<<score<<endl;

? ? }

};

int main()

{

? ? Stu s1("zhangs", 18, 90);

? ? //s1.show();? ? ? ? ? ? ? ? ? ? ? //100

? ? const Stu s2("lisi", 20, 50);? ? ? ? //該對象為常對象

? ? //s2.show();

? ? //定義常引用眉撵,目標(biāo)為非常對象

? ? const Stu &ref = s1;

? ? ref.show();? ? ? ? ? ? // 常引用也有常屬性侦香,調(diào)用成員函數(shù)時,只能調(diào)用常成員函數(shù)纽疟,不能調(diào)用非常成員函數(shù)

? ? s1.show();? ? ? ? ? ? //調(diào)用非常成員函數(shù)

? ? return 0;

}

三、運算符重載(operator)

自定義的類中憾赁,系統(tǒng)默認(rèn)只提供兩個運算符供用戶使用污朽,分別是賦值運算符和取地址運算符,其余運算符只使用用基本數(shù)據(jù)類型龙考,對于構(gòu)造數(shù)據(jù)類型而言蟆肆,不可直接使用,除非將該運算符進(jìn)行重載操作

3.1 定義

所謂運算符重載晦款,本質(zhì)上也是靜態(tài)多態(tài)的一種炎功,能夠?qū)崿F(xiàn)“一符多用”,使用運算符重載缓溅,能夠完成運算符作用于類對象之間蛇损,使得代碼更加簡潔、可讀性更強(qiáng)坛怪。

3.2 重載的方法

所有運算符重載淤齐,都擁有一個統(tǒng)一的名稱:operator#? ? ? (#表示運算符號)

參數(shù):根據(jù)運算符本身特點決定,如果是單目運算符袜匿,最多擁有一個參數(shù)更啄,如果是雙目運算符,最多擁有兩個參數(shù)

返回值:由用戶自己決定

3.3 調(diào)用原則及調(diào)用時機(jī)

1> 調(diào)用時機(jī):使用該運算符時居灯,系統(tǒng)自動調(diào)用祭务,無需手動調(diào)用

2> 調(diào)用原則:左調(diào)右參? (運算符的左側(cè)是函數(shù)調(diào)用者内狗,右側(cè)是該函數(shù)的參數(shù))? 例如:a = b;? ? ? ? //a.operator=(b)

3.4 重載版本

每個運算符重載,都可以實現(xiàn)兩個版本的重載函數(shù)义锥,分別是成員函數(shù)版和全局函數(shù)版

成員函數(shù)版比全局函數(shù)版本少一個參數(shù)柳沙,因為類對象本身就是一個參數(shù)

全局函數(shù)版和成員函數(shù)版只能實現(xiàn)一個,否則會造成調(diào)用時的混亂情況

全局函數(shù)版缨该,需要使用友元函數(shù)來完成

3.5 算術(shù)類運算符重載

1> 種類:+偎行、-、*贰拿、/蛤袒、%

2> 表達(dá)式格式:L # R? ? ? ? ? ? ? ? //L表示左操作數(shù)? #表示運算符? R表示右操作數(shù)

3> 左操作數(shù):既可以是左值也可以是右值,運算過程中不會被修改

4> 右操作數(shù):既可以是左值也可以是右值膨更,運算過程中不會被修改

5> 結(jié)果:結(jié)果是一個同類的右值妙真,不能被改變

6> 定義格式:

全局函數(shù)版:const 類名 operator# (const 類名 &L, const 類名 &R)

成員函數(shù)版:const? 類名 operator# ( const 類名 &R)const

3.6 關(guān)系類運算符重載

1> 種類:>、<荚守、>=珍德、<=、==矗漾、!=

2> 表達(dá)式格式:L # R? ? ? ? ? ? ? ? //L表示左操作數(shù)? #表示運算符? R表示右操作數(shù)

3> 左操作數(shù):既可以是左值也可以是右值锈候,運算過程中不會被修改

4> 右操作數(shù):既可以是左值也可以是右值,運算過程中不會被修改

5> 結(jié)果:bool類型敞贡,表示真假

6> 定義格式:

全局函數(shù)版:bool operator# (const 類名 &L, const 類名 &R)

成員函數(shù)版:bool operator# ( const 類名 &R)const

3.7 賦值類運算符重載

1> 種類:=泵琳、+=、-=誊役、*=获列、/=、%=

2> 表達(dá)式格式:L # R? ? ? ? ? ? ? ? //L表示左操作數(shù)? #表示運算符? R表示右操作數(shù)

3> 左操作數(shù):只能是左值

4> 右操作數(shù):既可以是左值也可以是右值蛔垢,運算過程中不會被修改

5> 結(jié)果:自身的引用

6> 定義格式:

全局函數(shù)版:類名 &operator# (類名 &L, const 類名 &R)

成員函數(shù)版:類名 & operator# ( const 類名 &R)

3.8 單目運算符重載

1> 種類:击孩!、~鹏漆、*巩梢、&、-

2> 表達(dá)式格式: # O? ? ? ? ? ? ? ? //? #表示運算符? O表示操作數(shù)

3> 操作數(shù):既可以是左值也可以是右值甫男,運算過程中不能更改

4> 結(jié)果:同類的右值

5> 定義格式:

全局函數(shù)版:類名 operator# (const 類名 &O)

成員函數(shù)版:類名 operator# ( )const

3.9 自增自減運算符

1> 前置自增運算

1且改、表達(dá)式格式:++O

2、操作數(shù):只能是左值

3板驳、結(jié)果:更改后自身的引用又跛,是一個左值

4、定義格式

全局函數(shù)版:類名& operator++(類名 & other)

成員函數(shù)版:類名 & operator++()

2> 后置自增

1若治、表達(dá)式格式:O++

2慨蓝、操作數(shù):只能是左值

3感混、結(jié)果:臨時值,是一個右值礼烈,更改之前的值

4弧满、定義格式:為了區(qū)分跟前置自增的區(qū)別,后置自增多一個啞元進(jìn)行占位

全局函數(shù)版:類名 operator++(類名 & other此熬, int)

成員函數(shù)版:類名? operator++(int)

3.10 插入提取運算符的重載(<<? >>)

1> 這兩個運算符的使用:cout<<對象? ? cin>>對象名? ? ? ? ? //cout.operator<<(對象)

2> cin和cout所在的類分別為istream和ostream類庭呜,如果想要實現(xiàn)成員函數(shù)版的運算符重載,需要對這兩個類重新更改內(nèi)容

3> 對于這兩個運算符重載犀忱,只能使用全局函數(shù)版募谎,借助友元的威力來實現(xiàn)

4> 由于不需要訪問istream或ostream類中的私有成員或受保護(hù)成員,所以無需將該全局函數(shù)在istream和ostream類中設(shè)置成友元函數(shù)

5> 由于該函數(shù)要訪問自定義類的私有成員阴汇,所以只需在自定義類中將該全局函數(shù)設(shè)置成友元函數(shù)即可

6> 表達(dá)式:L#R? ? ? ? //L表示cin或cout? ? #表示<<或>>運算符? R表示自定義的類對象

7> 左操作數(shù):istream或ostream類對象

8> 右操作數(shù):自定義的類對象

9> 結(jié)果:左操作數(shù)自身的引用

10> 定義格式

ostream &operator<<(ostream &L,? const 類名 &R);

istream &operator>>(istream &L, 類名 &R);

#include <iostream>

using namespace std;

//定義一個復(fù)數(shù)類 5 + 3i

class Complex

{

private:

? ? int real;? ? ? ? //實部

? ? int vir;? ? ? ? ? //虛部

public:

? ? Complex() {}

? ? Complex(int r, int v):real(r), vir(v) {}? ? ? ? //有參構(gòu)造

? ? //定義展示函數(shù)

? ? void show()

? ? {

? ? ? ? if(vir>=0)

? ? ? ? {

? ? ? ? ? ? cout<<real<<" + "<<vir<<"i"<<endl;

? ? ? ? }else

? ? ? ? {

? ? ? ? ? ? cout<<real<<vir<<"i"<<endl;

? ? ? ? }

? ? }

? ? //全局函數(shù)版實現(xiàn)加運算符重載

? ? friend const Complex operator+ (const Complex &L, const Complex &R);

? ? //成員函數(shù)版實現(xiàn)運算符重載

? ? const? Complex? operator- ( const Complex? &R)const

? ? {

? ? ? ? Complex c;

? ? ? ? c.real = this->real - R.real;

? ? ? ? c.vir = this->vir - R.vir;

? ? ? ? return c;

? ? }

? ? //成員函數(shù)版實現(xiàn)關(guān)系運算符的重載:實部>實部? && 虛部>虛部

? ? bool operator>(const Complex &R)const

? ? {

? ? ? ? return this->real>R.real&&this->vir>R.vir;

? ? }

? ? //重載中括號運算符

? ? int & operator[](int index)

? ? {

? ? ? ? if(index == 0)

? ? ? ? {

? ? ? ? ? ? return real;? ? ? ? ? //返回實部

? ? ? ? }else if(index == 1)

? ? ? ? {

? ? ? ? ? ? return vir;? ? ? ? ? //返回虛部

? ? ? ? }

? ? }

? ? //重載+=運算符:實部+=實部? 虛部+=虛部

? ? Complex & operator+=(const Complex &R)

? ? {

? ? ? ? this->real += R.real;

? ? ? ? this->vir += R.vir;

? ? ? ? return *this;? ? ? ? ? ? ? ? //返回自身的引用

? ? }

? ? //重載負(fù)號運算符: 實部= -實部数冬, 虛部 = -虛部

? ? Complex operator-()

? ? {

? ? ? ? Complex c;

? ? ? ? c.real = -this->real;

? ? ? ? c.vir = -this->vir;

? ? ? ? return c;

? ? }

? ? //重載前置自增運算符重載函數(shù):實部 = 實部+1? 虛部=虛部+1

? ? Complex &operator++()

? ? {

? ? ? ? ++this->real;

? ? ? ? ++this->vir;

? ? ? ? return *this;

? ? }

? ? //重載后置自增運算符重載函數(shù):實部 = 實部+1? 虛部=虛部+1

? ? Complex operator++(int)

? ? {

? ? ? ? Complex c;

? ? ? ? c.real = this->real++;

? ? ? ? c.vir = this->vir++;

? ? ? ? return c;

? ? }

? ? //將全局函數(shù)版實現(xiàn)的輸出運算符重載函數(shù)設(shè)置成友元

? ? friend ostream &operator<<(ostream &L, Complex &c);

? ? //重載小括號運算符,做一個仿函數(shù)

? ? void operator()(string s)

? ? {

? ? ? ? cout<<s<<endl;

? ? }

? ? //重載小括號運算符搀庶,做一個仿函數(shù)

? ? void operator()()

? ? {

? ? ? ? cout<<520<<" "<<1314<<endl;

? ? }

? ? //重寫類型轉(zhuǎn)換運算符

? ? operator int()

? ? {

? ? ? ? return real;? ? ? ? //將該數(shù)據(jù)類型向int類型轉(zhuǎn)換后拐纱,使用的是real的值

? ? }

};

//全局函數(shù)版實現(xiàn)加號運算符重載:實部+實部? 虛部+虛部

const Complex operator+ (const Complex &L, const Complex &R)

{

? ? //定義一個臨時空間

? ? Complex c;

? ? c.real = L.real + R.real;

? ? c.vir = L.vir + R.vir;

? ? return c;

}

//重載輸出運算符函數(shù)

ostream &operator<<(ostream &L, Complex &c)

{

? ? if(c.vir>=0)

? ? {

? ? ? ? L<<c.real<<" + "<<c.vir<<"i"<<endl;

? ? }else

? ? {

? ? ? ? L<<c.real<<c.vir<<"i"<<endl;

? ? }

? ? //返回左操作數(shù)自身的引用

? ? return L;

}

int main()

{

? ? Complex c1(5,3);

? ? c1.show();? ? ? ? ? ? ? ? ? ? //5+3i

? ? Complex c2(2,-1);

? ? c2.show();? ? ? ? ? ? ? ? ? ? ? //2-1i

? ? Complex c3 = c1-c2;? ? ? ? ? ? //調(diào)用加法運算符重載函數(shù)? c1.operator-(c2)

? ? c3.show();? ? ? ? ? ? ? ? ? ? ? //3+4i

? ? if(c3 > c2)? ? ? ? ? ? ? //調(diào)用關(guān)系運算符重載函數(shù)

? ? {

? ? ? ? cout<<"yes"<<endl;

? ? }else

? ? {

? ? ? ? cout<<"no"<<endl;

? ? }

? ? c3[0] = 5;? ? ? ? ? ? ? //將實部進(jìn)行修改成5,調(diào)用中括號運算符重載

? ? c3.show();? ? ? ? ? ? ? ? ? //5+4i

? ? c3 += c2;? ? ? ? ? ? //調(diào)用+=運算符重載函數(shù)

? ? c3.show();? ? ? ? ? ? //7+3i

? ? Complex c4 = -c3;? ? ? //調(diào)用-號運算符重載

? ? c4.show();? ? ? ? ? ? ? //-7 - 3i

? ? c3.show();? ? ? ? ? ? //7+3i

? ? Complex c5 = ++c3;? ? ? ? ? //調(diào)用前置自增運算符重載函數(shù)

? ? c5.show();? ? ? ? ? ? ? ? ? //8+4i

? ? c3.show();? ? ? ? ? ? ? ? ? //8+4i

? ? Complex c6 = c3++;? ? ? ? ? //調(diào)用后置自增運算符重載函數(shù)

? ? c6.show();? ? ? ? ? ? ? ? ? //8+4i

? ? c3.show();? ? ? ? ? ? ? ? ? //9+5i

? ? cout<<c3;? ? ? ? ? ? ? ? //cout.operator<<(c3)

? ? c3("hello world");? ? ? //c3.operator()("hello world");

? ? c3();


? ? int num = (int)c3;? ? ? ? ? ? //調(diào)用類型轉(zhuǎn)換運算符重載函數(shù)

? ? cout<<"num = "<<num<<endl;

? ? return 0;

}

3.11 不能重載的運算符

1> 成員運算符 .

2> 成員指針運算符 .*

3> 作用域限定符 ::

4> 求字節(jié)運算符 sizeof

5> 三目運算符 ?:

3.12 運算符重載注意事項

1> 運算符重載,不能改變運算符的優(yōu)先級

2> 運算符重載哥倔,不能改變運算符操作數(shù)個數(shù)

3> 運算符重載秸架,不能更改運算符的本質(zhì)邏輯,例如不允許在加法運算符重載函數(shù)中咆蒿,實現(xiàn)加法

4> 運算符重載咕宿,不能自己造運算符,是在已有的運算符的基礎(chǔ)上進(jìn)行重載操作

5> 運算符重載蜡秽,不能改變運算符的結(jié)合律

6> 運算符重載,一般不設(shè)置默認(rèn)參數(shù)

作業(yè)

仿照string類缆镣,完成myString 類

class myString

{

? ? private:

? ? ? ? char *str;? ? ? ? ? //記錄c風(fēng)格的字符串

? ? ? ? int size;? ? ? ? ? ? //記錄字符串的實際長度

? ? public:

? ? ? ? //無參構(gòu)造

? ? ? ? myString():size(10)

? ? ? ? {

? ? ? ? ? ? str = new char[size];? ? ? ? //構(gòu)造出一個長度為10的字符串?

? ? ? ? ? ? strcpy(str,"");? ? ? ? //賦值為空串? ? ? ? ?

? ? ? ? }

? ? ? ? //有參構(gòu)造

? ? ? ? myString(const char *s)? ? ? ? ? //string? s("hello world")

? ? ? ? {

? ? ? ? ? ? size = strlen(s);

? ? ? ? ? ? str = new char[size+1];

? ? ? ? ? ? strcpy(str, s);

? ? ? ? }


? ? ? ? //拷貝構(gòu)造

? ? ? ? //析構(gòu)函數(shù)

? ? ? ? //拷貝賦值函數(shù)

? ? ? ? //判空函數(shù)

? ? ? ? //size函數(shù)

? ? ? ? //c_str函數(shù)

? ? ? ? //at函數(shù)

? ? ? ? char &at(int pos)? ? ? ? ? ? ?

? ? ? ? //加號運算符重載

? ? ? ? //加等于運算符重載

? ? ? ? //關(guān)系運算符重載(>)?

? ? ? ? //中括號運算符重載

};

附:現(xiàn)在只是囫圇吞棗似的學(xué)芽突,沒有感覺。至于后繼感悟董瞻,節(jié)后重修一遍再

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末寞蚌,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子钠糊,更是在濱河造成了極大的恐慌挟秤,老刑警劉巖,帶你破解...
    沈念sama閱讀 211,376評論 6 491
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件抄伍,死亡現(xiàn)場離奇詭異艘刚,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)截珍,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,126評論 2 385
  • 文/潘曉璐 我一進(jìn)店門攀甚,熙熙樓的掌柜王于貴愁眉苦臉地迎上來箩朴,“玉大人,你說我怎么就攤上這事秋度≌ㄅ樱” “怎么了?”我有些...
    開封第一講書人閱讀 156,966評論 0 347
  • 文/不壞的土叔 我叫張陵荚斯,是天一觀的道長埠居。 經(jīng)常有香客問我,道長事期,這世上最難降的妖魔是什么滥壕? 我笑而不...
    開封第一講書人閱讀 56,432評論 1 283
  • 正文 為了忘掉前任,我火速辦了婚禮刑赶,結(jié)果婚禮上捏浊,老公的妹妹穿的比我還像新娘。我一直安慰自己撞叨,他們只是感情好金踪,可當(dāng)我...
    茶點故事閱讀 65,519評論 6 385
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著牵敷,像睡著了一般胡岔。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上枷餐,一...
    開封第一講書人閱讀 49,792評論 1 290
  • 那天靶瘸,我揣著相機(jī)與錄音,去河邊找鬼毛肋。 笑死怨咪,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的润匙。 我是一名探鬼主播诗眨,決...
    沈念sama閱讀 38,933評論 3 406
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼孕讳!你這毒婦竟也來了匠楚?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,701評論 0 266
  • 序言:老撾萬榮一對情侶失蹤厂财,失蹤者是張志新(化名)和其女友劉穎芋簿,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體璃饱,經(jīng)...
    沈念sama閱讀 44,143評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡与斤,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,488評論 2 327
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片幽告。...
    茶點故事閱讀 38,626評論 1 340
  • 序言:一個原本活蹦亂跳的男人離奇死亡梅鹦,死狀恐怖罪裹,靈堂內(nèi)的尸體忽然破棺而出桑谍,到底是詐尸還是另有隱情,我是刑警寧澤爬橡,帶...
    沈念sama閱讀 34,292評論 4 329
  • 正文 年R本政府宣布冻河,位于F島的核電站箍邮,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏叨叙。R本人自食惡果不足惜锭弊,卻給世界環(huán)境...
    茶點故事閱讀 39,896評論 3 313
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望擂错。 院中可真熱鬧味滞,春花似錦、人聲如沸钮呀。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,742評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽爽醋。三九已至蚁署,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間蚂四,已是汗流浹背光戈。 一陣腳步聲響...
    開封第一講書人閱讀 31,977評論 1 265
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點兒被人妖公主榨干…… 1. 我叫王不留遂赠,地道東北人久妆。 一個月前我還...
    沈念sama閱讀 46,324評論 2 360
  • 正文 我出身青樓,卻偏偏與公主長得像跷睦,于是被迫代替她去往敵國和親镇饺。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 43,494評論 2 348

推薦閱讀更多精彩內(nèi)容

  • 哈嘍送讲,大家好。最近幾天惋啃,我把去年秋招總結(jié)的筆試面試的一些內(nèi)容哼鬓,又進(jìn)行了重新規(guī)劃分類。詳細(xì)分成了簡歷書寫边灭,面試技巧异希,...
    3561cc5dc1b0閱讀 465評論 0 1
  • 一、類 在C++中绒瘦,類是面向?qū)ο蟮幕A(chǔ)特征封裝的實現(xiàn)称簿,我們可以將實現(xiàn)某事物的所有屬性(成員變量)扣癣、行為(成員函數(shù))...
    彬粉世界閱讀 77評論 0 2
  • 今天要學(xué)三個知識點:引用、內(nèi)存分配及重載 一憨降、引用 & 引用是C++對C的一個非常重要的擴(kuò)充父虑,引用的引入,...
    彬粉世界閱讀 89評論 0 1
  • 我們學(xué)習(xí)了單鏈表授药、雙向鏈表等數(shù)據(jù)存儲結(jié)構(gòu)士嚎。經(jīng)過這些天的揣摩,事實告訴我們悔叽,如果不是應(yīng)對考試莱衩,不管什么什么鏈...
    彬粉世界閱讀 91評論 0 2
  • 本篇參考網(wǎng)上及自身的面試經(jīng)驗,總結(jié)一些高頻考察的Linux C/C++知識點娇澎,方便后續(xù)查閱總結(jié)笨蚁。 一、C/C++編...
    開源519閱讀 233評論 0 0