MST

星途 面试题库

面试题:C++类作用域与模板结合的复杂问题

定义一个模板类TemplateClass,它有一个成员函数print(),该函数需要根据类作用域内的一个静态常量决定输出内容。然后定义一个继承自TemplateClass的派生类DerivedTemplateClass,在派生类作用域内修改这个静态常量的值,并在派生类对象调用print()时体现出不同的输出。阐述在实现过程中类作用域对模板成员和继承关系的影响,给出完整代码实现。
12.4万 热度难度
编程语言C++

知识考点

AI 面试

面试题答案

一键面试
#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;
}

类作用域对模板成员和继承关系的影响阐述:

  1. 模板类中的静态成员:模板类的静态成员是属于模板实例化后的每个具体类的,每个实例化的模板类都有自己独立的静态成员。例如TemplateClass<int>TemplateClass<double>拥有各自独立的value
  2. 继承关系:派生类从模板基类继承了成员函数和静态成员。派生类可以重定义从基类继承来的静态成员,就像在DerivedTemplateClass中重定义了value
  3. 作用域影响:在不同类作用域内,静态成员有不同的值。当在派生类对象上调用print函数时,由于派生类重定义了value,所以会输出派生类作用域内的value值,体现了类作用域对静态成员的影响。同时,这种机制在继承体系中保持了一致性,使得每个类都可以根据自己的需求定制静态成员的值。