兖州做网站,学做网站根学ps有前途吗,南昌正规网站公司吗,html编辑器电脑一、类模板与继承
当类模板碰到继承时#xff0c;需要注意一下几点#xff1a;
1.当子类继承的父类是一个类模板时#xff0c;子类在声明的时候#xff0c;要指定出父类中T的类型
2.如果不指定#xff0c;编译器无法给子类分配内存
3.如果想灵活指定出父类中T的类型需要注意一下几点
1.当子类继承的父类是一个类模板时子类在声明的时候要指定出父类中T的类型
2.如果不指定编译器无法给子类分配内存
3.如果想灵活指定出父类中T的类型子类也需变为类模板
#includeiostream
using namespace std;//类模板与继承templateclass T
class Base
{T m;
};//class Son :public Base //错误必须要直到父类中的T类型(分配内存)才能继承给子类
class Son :public Baseint//必须指定一个类型
{};void test01()
{Son s1;
}//如果想灵活指定父类中T类型子类也需要变类模板
templateclass T1,class T2
class Son2 :public BaseT2
{
public:Son2(){cout T1的类型为 typeid(T1).name() endl;cout T2的类型为 typeid(T2).name() endl;}T1 obj;
};void test02()
{Son2int, chars2;
}int main()
{test01();test02();return 0;
}
二、 类模板成员函数类外实现
#includeiostream
using namespace std;
#includestring//类模板成员函数类外实现
templateclass T1, class T2
class Person
{
public:Person(T1 name, T2 age);//类内声明//{// this-m_Name name;// this-m_Age age;//}void showPerson();//类内声明//{// cout 姓名 this-m_Name 年龄 this-m_Age endl;//}T1 m_Name;T2 m_Age;
};//构造函数 类外实现
templateclass T1, class T2
PersonT1, T2::Person(T1 name, T2 age)
{this-m_Name name;this-m_Age age;
}//成员函数 类外实现
templateclass T1, class T2
void PersonT1, T2::showPerson()
{cout 姓名 this-m_Name 年龄 this-m_Age endl;
}void test()
{Personstring, intP(Tom, 20);P.showPerson();
}int main()
{test();return 0;
}
总结类模板中成员函数类外实现时需要加上模板参数列表
三、类模板全局函数的类内类外实现
全局函数类内实现 - 直接在类内声明友元即可
全局函数类外实现 - 需要提前让编译器知道全局函数的存在
#includeiostream
using namespace std;
#includestring//通过全局函数来打印 Person 信息//提前让编译器知道 Person 类的存在
templateclass T1, class T2
class Person; //类外实现 函数模板的实现
templateclass T1, class T2
void printPerson2(PersonT1, T2p)
{cout 类外实现---姓名 p.m_Name 年龄 p.m_Age endl;
}templateclass T1,class T2
class Person
{//全局函数 类内实现friend void printPerson1(PersonT1, T2p){cout 姓名 p.m_Name 年龄 p.m_Age endl;}//全局函数 类外实现(类内声明,类外实现)//加空模板参数列表---函数模板的声明//如果全局函数是类外实现需要让编译器提前知道这个函数的存在friend void printPerson2(PersonT1, T2p);无尖括号则为普通函数的声明public:Person(T1 name, T2 age){this-m_Name name;this-m_Age age;}private:T1 m_Name;T2 m_Age;
};//1.全局函数在类内实现
void test01()
{Personstring, intp(Tom, 18);printPerson1(p);
}//2.全局函数在类外实现
void test02()
{Personstring, intp(Jerry, 18);printPerson2(p);
}int main()
{//test01();test02();return 0;
}
总结建议全局函数做类内实现用法简单而且编译器可以直接识别