CPP基礎(chǔ):面向?qū)ο缶幊?/h1>

面向?qū)ο缶幊?/h1>

C++ 在 C 語(yǔ)言的基礎(chǔ)上增加了面向?qū)ο缶幊逃保珻++ 支持面向?qū)ο蟪绦蛟O(shè)計(jì)。類是 C++ 的核心特性,用戶定義的類型。

class Student {
    int i;    //默認(rèn) private
public:
    Student(int i,int j,int k):i(i),j(j),k(k){};    //構(gòu)造方法 
    ~Student(){};   //析構(gòu)方法 
private:
    int j;
protected:
    int k;
};

Student student(1,2,3); //調(diào)用構(gòu)造方法 棧
//出方法釋放student 調(diào)用析構(gòu)方法

//動(dòng)態(tài)內(nèi)存(堆)
Student *student = new Student(1,2,3);
//釋放
delete student;
student = 0;

類的析構(gòu)函數(shù)是類的一種特殊的成員函數(shù)韩脑,它會(huì)在每次刪除所創(chuàng)建的對(duì)象時(shí)執(zhí)行(不需要手動(dòng)調(diào)用)。

private:可以被該類中的函數(shù)粹污、友元函數(shù)訪問(wèn)段多。 不能被任何其他訪問(wèn),該類的對(duì)象也不能訪問(wèn)壮吩。

protected:可以被該類中的函數(shù)进苍、子類的函數(shù)、友元函數(shù)訪問(wèn)鸭叙。 但不能被該類的對(duì)象訪問(wèn)觉啊。

public:可以被該類中的函數(shù)、子類的函數(shù)沈贝、友元函數(shù)訪問(wèn)杠人,也可以被該類的對(duì)象訪問(wèn)。

常量函數(shù)

函數(shù)后寫上const宋下,表示不會(huì)也不允許修改類中的成員嗡善。

class Student {
    int i;
public:
    Student() {}
    ~Student() {}
    // 常量函數(shù)
    void  setName(char* _name) const  {
        //錯(cuò)誤 不能修改name 去掉const之后可以
        name = _name;
    }
private:
    int j;
    char *name;
protected:
    int k;
};

友元

類的友元函數(shù)是定義在類外部,但有權(quán)訪問(wèn)類的所有私有(private)成員和保護(hù)(protected)成員

友元可以是一個(gè)函數(shù)学歧,該函數(shù)被稱為友元函數(shù)滤奈;友元也可以是一個(gè)類,該類被稱為友元類撩满,在這種情況下蜒程,整個(gè)類及其所有成員都是友元。

友元函數(shù)

class Student {
    int i;
public:
    Student() {}
    ~Student() {}
    void  setName(char* _name)  {
        name = _name;
    }
    friend void printName(Student *student);
private:
    int j;
    char *name;
protected:
    int k;
};

void printName(Student *student) {
    //能夠使用student中私有的name屬性
    cout << student->name << endl;
}

Student *student = new Student;
student->setName("Lance");
printName(student);

友元類

class Student {
    int i;
public:
    Student() {}
    ~Student() {}
    void  setName(char* _name)  {
        name = _name;
    }
    friend void printName(Student *student);
    //友元類
    friend class Teacher;
private:
    int j;
    char *name;
protected:
    int k;
};

class Teacher {
public:
    void call(Student *student) {
        //能夠使用student中私有的name屬性
        cout << "call:" << student->name << endl;
    }
};

靜態(tài)成員

和Java一樣伺帘,可以使用static來(lái)聲明類成員為靜態(tài)的

當(dāng)我們使用靜態(tài)成員屬性或者函數(shù)時(shí)候 需要使用 域運(yùn)算符 ::

//Instance.h
#ifndef INSTANCE_H
#define INSTANCE_H
class Instance {
public:
    static Instance* getInstance();
private:
    static Instance *instance;
};
#endif 

//Instance.cpp
#include "Instance.h"
Instance* Instance::instance = 0;
Instance* Instance::getInstance() {
    //C++11以后昭躺,編譯器保證內(nèi)部靜態(tài)變量的線程安全性
    if (!instance) {
        instance = new Instance;
    }
    return instance;
}

重載函數(shù)

C++ 允許在同一作用域中的某個(gè)函數(shù)運(yùn)算符指定多個(gè)定義,分為函數(shù)重載運(yùn)算符重載伪嫁。

函數(shù)重載

void print(int i) {
    cout << "整數(shù)為: " << i << endl;
}
 
void print(double  f) {
    cout << "浮點(diǎn)數(shù)為: " << f << endl;
}

操作符重載

C++允許重定義或重載大部分 C++ 內(nèi)置的運(yùn)算符

函數(shù)名是由關(guān)鍵字 operator 和其后要重載的運(yùn)算符符號(hào)構(gòu)成的

重載運(yùn)算符可被定義為普通的非成員函數(shù)或者被定義為類成員函數(shù)

成員函數(shù)

class Test1 {
public:
    Test1(){}
    //定義成員函數(shù)進(jìn)行重載
    //返回對(duì)象   調(diào)用拷貝構(gòu)造函數(shù)  釋放函數(shù)內(nèi) t 對(duì)象
    //引用類型(Test1&) 沒(méi)有復(fù)制對(duì)象 返回的是 t 對(duì)象本身 t會(huì)被釋放 所以會(huì)出現(xiàn)問(wèn)題(數(shù)據(jù)釋放不徹底就不一定)
    // 可以輸出 t 與 t3 地址查看
    Test1 operator+(const Test1& t1) {
        Test1 t;
        t.i = this->i + t1.i;
        return t;
    }
    //拷貝構(gòu)造函數(shù) (有默認(rèn)的) 
    Test1(const Test1& t){
        //淺拷貝
        this->i = t.i;
        cout << "拷貝" << endl;
        //如果動(dòng)態(tài)申請(qǐng)內(nèi)存 需要深拷貝
    };
    int i;
};

Test1 t1;
Test1 t2;
t1.i = 100;
t2.i = 200;
//發(fā)生兩次拷貝
// C++真正的臨時(shí)對(duì)象是不可見(jiàn)的匿名對(duì)象
//1领炫、拷貝構(gòu)造一個(gè)無(wú)名的臨時(shí)對(duì)象,并返回這個(gè)臨時(shí)對(duì)象
//2张咳、由臨時(shí)對(duì)象拷貝構(gòu)造對(duì)象 t3
//語(yǔ)句結(jié)束析構(gòu)臨時(shí)對(duì)象
Test1 t3 = t1 + t2;
cout << t3.i << endl;

Xcode上玩帝洪,使用的g++編譯器會(huì)進(jìn)行 返回值優(yōu)化(RVO似舵、NRVO) 從而看不到拷貝構(gòu)造函數(shù)的調(diào)用。

可以加入 "-fno-elide-constructors" 取消GNU g++優(yōu)化

<u>對(duì)windows vs編譯器cl.exe無(wú)效葱峡,VS Debug執(zhí)行RVO砚哗,Release執(zhí)行NRVO</u>

RVO(Return Value Optimization):消除函數(shù)返回時(shí)創(chuàng)建的臨時(shí)對(duì)象

NRVO(Named Return Value Optimization):屬于 RVO 的一種技術(shù), 直接將要初始化的對(duì)象替代掉返回的局部對(duì)象進(jìn)行操作。

非成員函數(shù)

class Test2 {
public:
    int i;
};
//定義非成員函數(shù)進(jìn)行 + 重載
Test2 operator+(const Test2& t21, const Test2& t22) {
    Test2 t;
    t.i = t21.i + t22.i;
    return t;
}

Test2 t21;
Test2 t22;
t21.i = 100;
t22.i = 200;
Test2 t23 = t21 + t22;
cout << t23.i << endl;

允許重載的運(yùn)算符

類型 運(yùn)算符
關(guān)系運(yùn)算符 ==(等于)砰奕,!= (不等于)蛛芥,< (小于),> (大于>军援,<=(小于等于)仅淑,>=(大于等于)
邏輯運(yùn)算符 ||(邏輯或),&&(邏輯與)胸哥,!(邏輯非)
單目運(yùn)算符 + (正)涯竟,-(負(fù)),*(指針)空厌,&(取地址)
自增自減運(yùn)算符 ++(自增)昆禽,--(自減)
位運(yùn)算符 | (按位或),& (按位與)蝇庭,~(按位取反),^(按位異或),捡硅,<< (左移)哮内,>>(右移)
賦值運(yùn)算符 =, +=, -=, *=, /= , % = , &=, |=, ^=, <<=, >>=
空間申請(qǐng)與釋放 new, delete, new[ ] , delete[]
其他運(yùn)算符 ()(函數(shù)調(diào)用),->(成員訪問(wèn))壮韭,,(逗號(hào))北发,
void *operator new (size_t size)
{
    cout << "新的new:" << size << endl;
    return malloc(size);
}

void operator delete(void *p)
{
    //釋放由p指向的存儲(chǔ)空間
    cout << "新的delete" << endl;
    free(p);
}
... ...

繼承

class A:[private/protected/public] B

默認(rèn)為private繼承

A是基類,B稱為子類或者派生類

方式 說(shuō)明
public 基類的public喷屋、protected成員也是派生類相應(yīng)的成員琳拨,基類的private成員不能直接被派生類訪問(wèn),但是可以通過(guò)調(diào)用基類的公有和保護(hù)成員來(lái)訪問(wèn)屯曹。
protected 基類的公有和保護(hù)成員將成為派生類的保護(hù)成員
private 基類的公有和保護(hù)成員將成為派生類的私有成員
class Parent {
public:
    void test() {
        cout << "parent" << endl;
    }
};

class Child :   Parent {
public:
    void test() {
         // 調(diào)用父類 方法
        Parent::test();
        cout << "child" << endl;
    }
};

多繼承

一個(gè)子類可以有多個(gè)父類狱庇,它繼承了多個(gè)父類的特性。

class <派生類名>:<繼承方式1><基類名1>,<繼承方式2><基類名2>,…

多態(tài)

多種形態(tài)恶耽。當(dāng)類之間存在層次結(jié)構(gòu)密任,并且類之間是通過(guò)繼承關(guān)聯(lián)時(shí),就會(huì)用到多態(tài)偷俭。

靜態(tài)多態(tài)(靜態(tài)聯(lián)編)是指在編譯期間就可以確定函數(shù)的調(diào)用地址浪讳,通過(guò)函數(shù)重載模版(泛型編程)實(shí)現(xiàn)

動(dòng)態(tài)多態(tài)(動(dòng)態(tài)聯(lián)編)是指函數(shù)調(diào)用的地址不能在編譯器期間確定,必須需要在運(yùn)行時(shí)才確定 ,通過(guò)繼承+虛函數(shù) 實(shí)現(xiàn)

虛函數(shù)

class Parent {
public:
     void test() {
        cout << "parent" << endl;
    }
};

class Child :public Parent {
public:
    void test() {
        cout << "child" << endl;
    }
};

Parent *c = new Child();
// 編譯期間 確定c 為 parent 調(diào)用parent的test方法
c->test();

//修改Parent為virtual 虛函數(shù) 動(dòng)態(tài)鏈接,告訴編譯器不要靜態(tài)鏈接到該函數(shù)
virtual void test() {
        cout << "parent" << endl;
}
//動(dòng)態(tài)多態(tài) 調(diào)用Child的test方法
c->test();

構(gòu)造函數(shù)任何時(shí)候都不可以聲明為虛函數(shù)

析構(gòu)函數(shù)一般都是虛函數(shù),釋放先執(zhí)行子類再執(zhí)行父類

純虛函數(shù)

class Parent {
public:
    //純虛函數(shù) 繼承自這個(gè)類需要實(shí)現(xiàn) 抽象類型
    virtual void test() = 0;
};

class Child :public Parent {
public:
    void test(){}
};

模板

模板是泛型編程的基礎(chǔ)

函數(shù)模板

函數(shù)模板能夠用來(lái)創(chuàng)建一個(gè)通用的函數(shù)涌萤。以支持多種不同的形參淹遵。避免重載函數(shù)的函數(shù)體反復(fù)設(shè)計(jì)口猜。

template <typename T> 
T max(T a,T b)
{
    // 函數(shù)的主體
    return  a > b ? a : b;
}
//代替了
int max(int a,int b)
int max(float a,float b)

類模板(泛型類)

為類定義一種模式。使得類中的某些數(shù)據(jù)成員透揣、默寫成員函數(shù)的參數(shù)济炎、某些成員函數(shù)的返回值,能夠取隨意類型

常見(jiàn)的 容器比如 向量 vector <int> 或 vector <string> 就是模板類

template<class E,class T>
class Queue {
public:
    T add(E e,T t){
        return e+t;
    }
};

Queue<int,float> q;
q.add(1,1.1f) = 2.1f

面向?qū)ο缶幊?/h1>

[TOC]

C++ 在 C 語(yǔ)言的基礎(chǔ)上增加了面向?qū)ο缶幊烫适担珻++ 支持面向?qū)ο蟪绦蛟O(shè)計(jì)冻辩。類是 C++ 的核心特性,用戶定義的類型拆祈。

class Student {
    int i;    //默認(rèn) private
public:
    Student(int i,int j,int k):i(i),j(j),k(k){};    //構(gòu)造方法 
    ~Student(){};   //析構(gòu)方法 
private:
    int j;
protected:
    int k;
};

Student student(1,2,3); //調(diào)用構(gòu)造方法 棧
//出方法釋放student 調(diào)用析構(gòu)方法

//動(dòng)態(tài)內(nèi)存(堆)
Student *student = new Student(1,2,3);
//釋放
delete student;
student = 0;

類的析構(gòu)函數(shù)是類的一種特殊的成員函數(shù)恨闪,它會(huì)在每次刪除所創(chuàng)建的對(duì)象時(shí)執(zhí)行(不需要手動(dòng)調(diào)用)。

private:可以被該類中的函數(shù)放坏、友元函數(shù)訪問(wèn)咙咽。 不能被任何其他訪問(wèn),該類的對(duì)象也不能訪問(wèn)淤年。

protected:可以被該類中的函數(shù)钧敞、子類的函數(shù)、友元函數(shù)訪問(wèn)麸粮。 但不能被該類的對(duì)象訪問(wèn)溉苛。

public:可以被該類中的函數(shù)、子類的函數(shù)弄诲、友元函數(shù)訪問(wèn)愚战,也可以被該類的對(duì)象訪問(wèn)。

常量函數(shù)

函數(shù)后寫上const齐遵,表示不會(huì)也不允許修改類中的成員寂玲。

class Student {
    int i;
public:
    Student() {}
    ~Student() {}
    // 常量函數(shù)
    void  setName(char* _name) const  {
        //錯(cuò)誤 不能修改name 去掉const之后可以
        name = _name;
    }
private:
    int j;
    char *name;
protected:
    int k;
};

友元

類的友元函數(shù)是定義在類外部,但有權(quán)訪問(wèn)類的所有私有(private)成員和保護(hù)(protected)成員

友元可以是一個(gè)函數(shù)梗摇,該函數(shù)被稱為友元函數(shù)拓哟;友元也可以是一個(gè)類,該類被稱為友元類伶授,在這種情況下断序,整個(gè)類及其所有成員都是友元。

友元函數(shù)

class Student {
    int i;
public:
    Student() {}
    ~Student() {}
    void  setName(char* _name)  {
        name = _name;
    }
    friend void printName(Student *student);
private:
    int j;
    char *name;
protected:
    int k;
};

void printName(Student *student) {
    //能夠使用student中私有的name屬性
    cout << student->name << endl;
}

Student *student = new Student;
student->setName("Lance");
printName(student);

友元類

class Student {
    int i;
public:
    Student() {}
    ~Student() {}
    void  setName(char* _name)  {
        name = _name;
    }
    friend void printName(Student *student);
    //友元類
    friend class Teacher;
private:
    int j;
    char *name;
protected:
    int k;
};

class Teacher {
public:
    void call(Student *student) {
        //能夠使用student中私有的name屬性
        cout << "call:" << student->name << endl;
    }
};

靜態(tài)成員

和Java一樣糜烹,可以使用static來(lái)聲明類成員為靜態(tài)的

當(dāng)我們使用靜態(tài)成員屬性或者函數(shù)時(shí)候 需要使用 域運(yùn)算符 ::

//Instance.h
#ifndef INSTANCE_H
#define INSTANCE_H
class Instance {
public:
    static Instance* getInstance();
private:
    static Instance *instance;
};
#endif 

//Instance.cpp
#include "Instance.h"
Instance* Instance::instance = 0;
Instance* Instance::getInstance() {
    //C++11以后逢倍,編譯器保證內(nèi)部靜態(tài)變量的線程安全性
    if (!instance) {
        instance = new Instance;
    }
    return instance;
}

重載函數(shù)

C++ 允許在同一作用域中的某個(gè)函數(shù)運(yùn)算符指定多個(gè)定義,分為函數(shù)重載運(yùn)算符重載景图。

函數(shù)重載

void print(int i) {
    cout << "整數(shù)為: " << i << endl;
}
 
void print(double  f) {
    cout << "浮點(diǎn)數(shù)為: " << f << endl;
}

操作符重載

C++允許重定義或重載大部分 C++ 內(nèi)置的運(yùn)算符

函數(shù)名是由關(guān)鍵字 operator 和其后要重載的運(yùn)算符符號(hào)構(gòu)成的

重載運(yùn)算符可被定義為普通的非成員函數(shù)或者被定義為類成員函數(shù)

成員函數(shù)

class Test1 {
public:
    Test1(){}
    //定義成員函數(shù)進(jìn)行重載
    //返回對(duì)象   調(diào)用拷貝構(gòu)造函數(shù)  釋放函數(shù)內(nèi) t 對(duì)象
    //引用類型(Test1&) 沒(méi)有復(fù)制對(duì)象 返回的是 t 對(duì)象本身 t會(huì)被釋放 所以會(huì)出現(xiàn)問(wèn)題(數(shù)據(jù)釋放不徹底就不一定)
    // 可以輸出 t 與 t3 地址查看
    Test1 operator+(const Test1& t1) {
        Test1 t;
        t.i = this->i + t1.i;
        return t;
    }
    //拷貝構(gòu)造函數(shù) (有默認(rèn)的) 
    Test1(const Test1& t){
        //淺拷貝
        this->i = t.i;
        cout << "拷貝" << endl;
        //如果動(dòng)態(tài)申請(qǐng)內(nèi)存 需要深拷貝
    };
    int i;
};

Test1 t1;
Test1 t2;
t1.i = 100;
t2.i = 200;
//發(fā)生兩次拷貝
// C++真正的臨時(shí)對(duì)象是不可見(jiàn)的匿名對(duì)象
//1较雕、拷貝構(gòu)造一個(gè)無(wú)名的臨時(shí)對(duì)象,并返回這個(gè)臨時(shí)對(duì)象
//2、由臨時(shí)對(duì)象拷貝構(gòu)造對(duì)象 t3
//語(yǔ)句結(jié)束析構(gòu)臨時(shí)對(duì)象
Test1 t3 = t1 + t2;
cout << t3.i << endl;

Xcode上玩亮蒋,使用的g++編譯器會(huì)進(jìn)行 返回值優(yōu)化(RVO扣典、NRVO) 從而看不到拷貝構(gòu)造函數(shù)的調(diào)用。

可以加入 "-fno-elide-constructors" 取消GNU g++優(yōu)化

<u>對(duì)windows vs編譯器cl.exe無(wú)效慎玖,VS Debug執(zhí)行RVO贮尖,Release執(zhí)行NRVO</u>

RVO(Return Value Optimization):消除函數(shù)返回時(shí)創(chuàng)建的臨時(shí)對(duì)象

NRVO(Named Return Value Optimization):屬于 RVO 的一種技術(shù), 直接將要初始化的對(duì)象替代掉返回的局部對(duì)象進(jìn)行操作。

返回值優(yōu)化.jpg

非成員函數(shù)

class Test2 {
public:
    int i;
};
//定義非成員函數(shù)進(jìn)行 + 重載
Test2 operator+(const Test2& t21, const Test2& t22) {
    Test2 t;
    t.i = t21.i + t22.i;
    return t;
}

Test2 t21;
Test2 t22;
t21.i = 100;
t22.i = 200;
Test2 t23 = t21 + t22;
cout << t23.i << endl;

允許重載的運(yùn)算符

類型 運(yùn)算符
關(guān)系運(yùn)算符 ==(等于)趁怔,!= (不等于)湿硝,< (小于),> (大于>润努,<=(小于等于)关斜,>=(大于等于)
邏輯運(yùn)算符 ||(邏輯或),&&(邏輯與)铺浇,!(邏輯非)
單目運(yùn)算符 + (正)痢畜,-(負(fù)),*(指針)鳍侣,&(取地址)
自增自減運(yùn)算符 ++(自增)丁稀,--(自減)
位運(yùn)算符 | (按位或),& (按位與)倚聚,~(按位取反)线衫,^(按位異或),,<< (左移)惑折,>>(右移)
賦值運(yùn)算符 =, +=, -=, *=, /= , % = , &=, |=, ^=, <<=, >>=
空間申請(qǐng)與釋放 new, delete, new[ ] , delete[]
其他運(yùn)算符 ()(函數(shù)調(diào)用)授账,->(成員訪問(wèn)),,(逗號(hào))唬复,
void *operator new (size_t size)
{
    cout << "新的new:" << size << endl;
    return malloc(size);
}

void operator delete(void *p)
{
    //釋放由p指向的存儲(chǔ)空間
    cout << "新的delete" << endl;
    free(p);
}
... ...

繼承

class A:[private/protected/public] B

默認(rèn)為private繼承

A是基類,B稱為子類或者派生類

方式 說(shuō)明
public 基類的public全肮、protected成員也是派生類相應(yīng)的成員敞咧,基類的private成員不能直接被派生類訪問(wèn),但是可以通過(guò)調(diào)用基類的公有和保護(hù)成員來(lái)訪問(wèn)辜腺。
protected 基類的公有和保護(hù)成員將成為派生類的保護(hù)成員
private 基類的公有和保護(hù)成員將成為派生類的私有成員
class Parent {
public:
    void test() {
        cout << "parent" << endl;
    }
};

class Child :   Parent {
public:
    void test() {
         // 調(diào)用父類 方法
        Parent::test();
        cout << "child" << endl;
    }
};

多繼承

一個(gè)子類可以有多個(gè)父類休建,它繼承了多個(gè)父類的特性。

class <派生類名>:<繼承方式1><基類名1>,<繼承方式2><基類名2>,…

多態(tài)

多種形態(tài)评疗。當(dāng)類之間存在層次結(jié)構(gòu)测砂,并且類之間是通過(guò)繼承關(guān)聯(lián)時(shí),就會(huì)用到多態(tài)百匆。

靜態(tài)多態(tài)(靜態(tài)聯(lián)編)是指在編譯期間就可以確定函數(shù)的調(diào)用地址砌些,通過(guò)函數(shù)重載模版(泛型編程)實(shí)現(xiàn)

動(dòng)態(tài)多態(tài)(動(dòng)態(tài)聯(lián)編)是指函數(shù)調(diào)用的地址不能在編譯器期間確定,必須需要在運(yùn)行時(shí)才確定 ,通過(guò)繼承+虛函數(shù) 實(shí)現(xiàn)

虛函數(shù)

class Parent {
public:
     void test() {
        cout << "parent" << endl;
    }
};

class Child :public Parent {
public:
    void test() {
        cout << "child" << endl;
    }
};

Parent *c = new Child();
// 編譯期間 確定c 為 parent 調(diào)用parent的test方法
c->test();

//修改Parent為virtual 虛函數(shù) 動(dòng)態(tài)鏈接,告訴編譯器不要靜態(tài)鏈接到該函數(shù)
virtual void test() {
        cout << "parent" << endl;
}
//動(dòng)態(tài)多態(tài) 調(diào)用Child的test方法
c->test();

構(gòu)造函數(shù)任何時(shí)候都不可以聲明為虛函數(shù)

析構(gòu)函數(shù)一般都是虛函數(shù),釋放先執(zhí)行子類再執(zhí)行父類

純虛函數(shù)

class Parent {
public:
    //純虛函數(shù) 繼承自這個(gè)類需要實(shí)現(xiàn) 抽象類型
    virtual void test() = 0;
};

class Child :public Parent {
public:
    void test(){}
};

模板

模板是泛型編程的基礎(chǔ)

函數(shù)模板

函數(shù)模板能夠用來(lái)創(chuàng)建一個(gè)通用的函數(shù)。以支持多種不同的形參存璃。避免重載函數(shù)的函數(shù)體反復(fù)設(shè)計(jì)仑荐。

template <typename T> 
T max(T a,T b)
{
    // 函數(shù)的主體
    return  a > b ? a : b;
}
//代替了
int max(int a,int b)
int max(float a,float b)

類模板(泛型類)

為類定義一種模式。使得類中的某些數(shù)據(jù)成員纵东、默寫成員函數(shù)的參數(shù)粘招、某些成員函數(shù)的返回值,能夠取隨意類型

常見(jiàn)的 容器比如 向量 vector <int> 或 vector <string> 就是模板類

template<class E,class T>
class Queue {
public:
    T add(E e,T t){
        return e+t;
    }
};

Queue<int,float> q;
q.add(1,1.1f) = 2.1f
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者

  • 序言:七十年代末偎球,一起剝皮案震驚了整個(gè)濱河市洒扎,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌衰絮,老刑警劉巖袍冷,帶你破解...
    沈念sama閱讀 216,402評(píng)論 6 499
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異岂傲,居然都是意外死亡难裆,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,377評(píng)論 3 392
  • 文/潘曉璐 我一進(jìn)店門镊掖,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)乃戈,“玉大人,你說(shuō)我怎么就攤上這事亩进≈⒙牵” “怎么了?”我有些...
    開封第一講書人閱讀 162,483評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵归薛,是天一觀的道長(zhǎng)谍憔。 經(jīng)常有香客問(wèn)我,道長(zhǎng)主籍,這世上最難降的妖魔是什么习贫? 我笑而不...
    開封第一講書人閱讀 58,165評(píng)論 1 292
  • 正文 為了忘掉前任,我火速辦了婚禮千元,結(jié)果婚禮上苫昌,老公的妹妹穿的比我還像新娘。我一直安慰自己幸海,他們只是感情好祟身,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,176評(píng)論 6 388
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著物独,像睡著了一般袜硫。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上挡篓,一...
    開封第一講書人閱讀 51,146評(píng)論 1 297
  • 那天婉陷,我揣著相機(jī)與錄音,去河邊找鬼。 笑死憨攒,一個(gè)胖子當(dāng)著我的面吹牛世杀,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播肝集,決...
    沈念sama閱讀 40,032評(píng)論 3 417
  • 文/蒼蘭香墨 我猛地睜開眼瞻坝,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了杏瞻?” 一聲冷哼從身側(cè)響起所刀,我...
    開封第一講書人閱讀 38,896評(píng)論 0 274
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎捞挥,沒(méi)想到半個(gè)月后浮创,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,311評(píng)論 1 310
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡砌函,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,536評(píng)論 2 332
  • 正文 我和宋清朗相戀三年斩披,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片讹俊。...
    茶點(diǎn)故事閱讀 39,696評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡垦沉,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出仍劈,到底是詐尸還是另有隱情厕倍,我是刑警寧澤,帶...
    沈念sama閱讀 35,413評(píng)論 5 343
  • 正文 年R本政府宣布贩疙,位于F島的核電站讹弯,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏这溅。R本人自食惡果不足惜组民,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,008評(píng)論 3 325
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望悲靴。 院中可真熱鬧臭胜,春花似錦、人聲如沸对竣。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,659評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)否纬。三九已至,卻和暖如春蛋褥,著一層夾襖步出監(jiān)牢的瞬間临燃,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,815評(píng)論 1 269
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留膜廊,地道東北人乏沸。 一個(gè)月前我還...
    沈念sama閱讀 47,698評(píng)論 2 368
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像爪瓜,于是被迫代替她去往敵國(guó)和親蹬跃。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,592評(píng)論 2 353

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