c++-类模板

    技术2024-04-02  105

    模板类类内部实现

    #include <iostream> #include <stdlib.h> #include <string> using namespace std; template<class T>//template<typename T> class Person{ public: Person(T name){ this->name = name; } void show(){ cout<<this->name<<endl; } private: T name; }; int main(){ Person<string> p1("tom"); p1.show(); system("pause"); }

    模板类类外部实现

    #include <iostream> #include <stdlib.h> #include <string> using namespace std; template<class T>//template<typename T> class Person{ public: Person(T name){ this->name = name; } void show(); private: T name; }; template<class T>//template<typename T> void Person<T>::show(){ cout<<this->name<<endl; } int main(){ Person<string> p1("tom"); p1.show(); system("pause"); }

    模板类操作符重载

    #include <iostream> #include <stdlib.h> #include <string> using namespace std; template<class T> class Person;//template<typename T>//普通友元这样写 linxwin通用 template<class T> void show(Person<T> p1);// 普通友元这样写 linxwin通用 template<class T> class Person{ public: Person(T name){ this->name = name; } //template<class T>//template<typename T> //windows 写法 friend ostream& operator<<<T>(ostream& os,Person<T> p1);//liunx win 通用写法 //template<class T> windows friend void show<T>(Person<T> p1);//前提是必须由上面的两句 private: T name; }; template<class T>//template<typename T> ostream& operator<<(ostream& os,Person<T> p1){ return os << "name" << p1.name << endl; } template<class T>//template<typename T> void show(Person<T> p1){ cout << "name" << p1.name << endl; } int main(){ Person<string> p1("tom"); cout << p1; show(p1); system("pause"); }

    模板类分文件编写

    main.cpp #include "Person.hpp" #include <iostream> #include <string> #include <stdlib.h> using namespace std; int main(){ Person<string> p1("tom"); p1.show(); system("pause"); } Person.hpp(将模板类声明和实现写在一个文件里)避免由于模板类二次遍历,各文件独立编译导致,文件无法调用模板类成员函数问题 #pragma once #include <iostream> #include <string> using namespace std; template<class T> class Person { public: Person(T name); void show(); ~Person(void); private: T name; }; template<class T> Person<T>::Person(T name) { this->name = name; } template<class T> void Person<T>::show(){ cout << this->name << endl; } template<class T> Person<T>::~Person(void) { }

    不要滥用友元,破坏函数的封装

    类模板与静态变量

    #include <iostream> #include <string> #include <stdlib.h> using namespace std; template<class T> class Person{ public: static int age; }; template<class T> int Person<T>::age = 0; int main(){ Person<int> a1,a2,a3;//a1 2 3 都是同一个从模板实例化出来的对象的实例化对象,所以共享static a1.age = 10; cout << a1.age << a2.age << a3.age << endl; Person<char> c1,c2,c3; c1.age = 20; cout << c1.age << c2.age << c3.age << endl; system("pause"); }
    Processed: 0.024, SQL: 9