我需要使用模板吗?

时间:2016-11-15 14:13:21

标签: c++

我希望你过得愉快! :)

我得到了这个main()代码,我需要这样做才能正常工作。

  

1)我只能使用1个班级; 2)避免代码重复3)你不能改变main()函数

我想问几个问题:

  1. 我需要使用模板吗?
  2. 如果我只能使用1个课程,怎样才能获得1个以上的对象(dog./peroson)? :)

    int main() {
     Person p("Jon",22);
     Dog d("Rex","Beagle");
     p.printInfo();
     d.printInfo();
    return 0;
    
    }
    

2 个答案:

答案 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;

}