C++類模板的使用


#include<iostream>
#include<string>
#include<typeinfo>
using namespace std;
template <class Name,class Hobby,class Age>  //類模板做函數的參數 
class Dog{
private:
    Name m_name;
    Hobby m_hobby;
    Age m_age;

public:
    Dog(Name name,Hobby hobby,Age age){
        this->m_name=name;
        this->m_hobby=hobby;
        this->m_age=age;
    }
    void display(){
        cout<<"m_name:"<<m_name<<" m_hobby:"<<m_hobby<<" m_age:"<<m_age<<endl;
    }
};

void dis1(){
    Dog<string,string,int> dog1("小灰","",2);
    dog1.display();
}

// 參數模板化
template<class Name,class Hobby,class Age>
void dis2(Dog<Name,Hobby,Age> dog){  // 傳遞類
    cout << typeid(Name).name() << endl;
     cout << typeid(Hobby).name() << endl;
     cout << typeid(Age).name() << endl;
    dog.display();
}

// 整體類型化
template<class T>
void dis3(T &dog){  // 傳遞類
    cout << typeid(T).name() << endl;
    dog.display();
}

// 指定傳入類型
void dis4(Dog<string,string,int> dog) {  // 傳遞數據類型
    dog.display();
}

int main(){
    Dog<string,string,int> dog2("小黑","",1);
    dis1();
    dis2(dog2);
    dis3(dog2);
    dis4(dog2);
    return 0;
}

注意:該程序在烏班圖下會出現錯位如圖所示:

解決方法是:在生成的test文件下打開終端執行 ./test | c++filt -t 或在生成的a.out文件夾下執行./a.out | c++filt -t結果如下:

c++ filt使用方法:在終端執行:man C++FILT 命令 會出現:

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM