; endl;
}
}
第二种:重载操作符
点击查看代码
class Maker1
{
public:
Maker1(string name, int age)
{
this->name = name;
this->age = age;
}
public:
string name;
int age;
};
bool operator>(Maker1& m1, Maker1& m2)
{
if (m1.name > m2.name && m1.age > m2.age)
{
return true;
}
else
{
return false;
}
}
void test()
{
Maker1 a("aaa", 18);
Maker1 b("bbb", 20);
if (a > b)
{
cout << "a>b" << endl;
}
else
{
cout << "a<=b" << endl;
}
}
定义类模板
点击查看代码
//类模板是把类中的数据类型参数化
template<class NameType,class AgeType>
class Maker
{
public:
Maker(NameType name, AgeType age)
{
this->name = name;
this->age = age;
}
void printMaker()
{
cout << "Name:" << this->name << "Age:" << this->age << endl;
}
public:
NameType name;
AgeType age;
};
类模板的使用
点击查看代码
template<class NameType,class AgeType>
class Maker
{
public:
Maker(NameType name, AgeType age)
{
this->name = name;
this->age = age;
}
void printMaker()
{
cout << "Name:" << this->name << "Age:" << this->age << endl;
}
public:
NameType name;
AgeType age;
};
//类模板的使用
void test()
{
//1.类模版不会自动推导数据类型,要显示的告诉编译器是什么类型
Maker<string, int> m("高启强", 35);
m.printMaker();
//2.注意传入的参数,传入参数类型要程序员自己把握
Maker<int, int>m2(18, 20);
m2.printMaker();
//Maker<>m3("aaa", 18); //err:类模板“Maker"的参数太少,必须通过参数列表告诉编译器是什么类型
}
类模板和函数模板的区别
- 类模板不会自动推导数据类型,要显示的告诉编译器是什么类型
- 函数模板可以根据实参来推导数据类型
类模板的默认类型及其使用
点击查看代码
template<class NameType, class AgeType=int>
class Maker2
{
public:
Maker2(NameType name, AgeType age)
{
this->name = name;
this->age = age;
}
void printMaker()
{
cout << "Name:" << this->name << "Age:" << this->age << endl;
}
public:
NameType name;
AgeType age;
};
void test02()
{
//如果有默认类型,那么<>里可以少写类型
Maker2<string> m("高启强", 35);
//Maker2<string, int> m("高启兰", 20);
m.printMaker();
//以传入的类型为准
Maker2<string, double> m2("高启盛", 24.22);
m2.printMaker();
}
//5、类模板的默认参数注意
//默认类型后面的泛型类型都必须有默认类型
template<class NameType, class AgeType = int, class T = int>
class Maker3
{
public:
Maker3(NameType name, AgeType age)
{
this->name = name;
this->age = age;
}
void printMaker()
{
cout << "Name:" << this->name << " Age:" << this->age << endl;
}
public:
NameType name;
AgeType age;
};
void test03()
{
Maker3<string> m("高启强", 35);
m.printMaker();
}
类模板做函数参数
点击查看代码
template<class NameType, class AgeType>
class Maker
{
public:
Maker(NameType name, AgeType age)
{
this->name = name;
this->age = age;
}
void printMaker()
{
cout << "name = " << this->name << " " << " age = " << this->age << endl;
}
public:
NameType name;
AgeType age;
};
//类模板做函数参数
//1.指定传入的数据类型
void func(Maker<string, int&g