【发布时间】:2013-07-21 13:45:08
【问题描述】:
我想知道我的编码方式是否正确。我可以创建一个从模板类继承的模板 claas 吗?如果可以,以下代码是否正确:
template<typename Type>
class A{
public:
A(){};
method_A(){//do whatever}
protected:
int a;
}
第二类是:
template<typename Type>
class B:public<Type> A {
public:
B(){};
method_B(){this->a=0; this->method_A();}
protected:
int b;
}
我的最后一堂课是:
class C:public<double> B{
public:
C(){};
method_C(){ b = 0; method_B();}
protected:
int c;
}
为什么 this-> 在 B 类中是强制性的,而在 C 类中却不是?一般来说,我是否应该始终将this-> 添加到属于同一类的引用参数或方法?
【问题讨论】:
-
您的意思是
A<Type>和B<double>? -
它实际上称为类模板,而不是模板类。这是一个提示,一旦你实例化了一个类模板,它就不再是一个模板,而只是一个类。
-
请注意,您不能从派生类访问基类中定义的
private成员。将其设为protected或使用 getter/setter 函数。 -
将
method_a()替换为this->method_a()是解决此问题的最直接方法。如果你使用A<T>::method_a(),那么你说的有点不同,因为A<T>::method_a()在method_a()是一个虚函数的情况下不会执行动态绑定。
标签: c++ class templates inheritance