我希望你过得愉快! :)
我得到了这个main()代码,我需要这样做才能正常工作。
1)我只能使用1个班级; 2)避免代码重复3)你不能改变main()函数
我想问几个问题:
如果我只能使用1个课程,怎样才能获得1个以上的对象(dog./peroson)? :)
int main() {
Person p("Jon",22);
Dog d("Rex","Beagle");
p.printInfo();
d.printInfo();
return 0;
}
答案 0 :(得分:1)
不,你不能用模板做到这一点。您似乎对模板的含义存在误解。
这是一个类模板:
template <typename T> struct Foo { T value; }
请注意,这不是一个类。它只是一个模板。仅在您实例化模板时,例如
Foo<int> f;
Foo<double> g;
然后编译器将创建必要的代码,即
struct Foo<int> { int value; }
struct Foo<double> { double value; }
那些是两个班,而不是一个班!
如果你真的想用一个类来获得它,唯一的方法是使用这样的别名:
typedef Dog Person;
然而,我强烈怀疑这是演习的重点。如果它真的是关于模板,我唯一的解释就是你误解了某些东西而你实际上应该使用两个类(也许)应该是同一个模板的两个不同的实例,例如像这样......
typedef Foo<int> Dog;
typedef Foo<double> Person;
答案 1 :(得分:0)
我想出了这个解决方案,也许这有助于某人。
#include <iostream>
using namespace std;
#include <cmath>
template <class T1, class T2>
class Person {
T1 attr1;
T2 attr2;
public:
Person(T1 a1, T2 a2) {
attr1 = a1; attr2 = a2;
}
void printInfo() {
cout <<"Hi my name is "<< attr1 << " and i'm ' " << attr2 << endl;
}
};
typedef Person<string,int> Personn;
typedef Person<string,string> Dog;
int main() {
Personn p("Jon",22);
Dog d("Rex","Beagle");
p.printInfo();
d.printInfo();
return 0;
}