#include <iostream>
// 定义模板类TemplateClass
template <typename T>
class TemplateClass {
public:
// 静态常量
static const T value;
// 成员函数print
void print() {
std::cout << "TemplateClass value: " << value << std::endl;
}
};
// 初始化模板类的静态常量
template <typename T>
const T TemplateClass<T>::value = T();
// 定义派生类DerivedTemplateClass
template <typename T>
class DerivedTemplateClass : public TemplateClass<T> {
public:
// 重定义静态常量
static const T value;
// 重写print函数
void print() {
std::cout << "DerivedTemplateClass value: " << value << std::endl;
}
};
// 初始化派生类的静态常量
template <typename T>
const T DerivedTemplateClass<T>::value = T(1);
int main() {
TemplateClass<int> templateObj;
templateObj.print();
DerivedTemplateClass<int> derivedObj;
derivedObj.print();
return 0;
}
类作用域对模板成员和继承关系的影响阐述:
- 模板类中的静态成员:模板类的静态成员是属于模板实例化后的每个具体类的,每个实例化的模板类都有自己独立的静态成员。例如
TemplateClass<int>
和TemplateClass<double>
拥有各自独立的value
。
- 继承关系:派生类从模板基类继承了成员函数和静态成员。派生类可以重定义从基类继承来的静态成员,就像在
DerivedTemplateClass
中重定义了value
。
- 作用域影响:在不同类作用域内,静态成员有不同的值。当在派生类对象上调用
print
函数时,由于派生类重定义了value
,所以会输出派生类作用域内的value
值,体现了类作用域对静态成员的影响。同时,这种机制在继承体系中保持了一致性,使得每个类都可以根据自己的需求定制静态成员的值。