面试题答案
一键面试设计思路
- 模板类层次结构:设计至少三层的模板类派生体系。每层派生类增加独特的数据成员和功能,以体现继承和功能扩展。
- 静态成员变量:在基类中定义一个静态成员变量,用于统计特定类型对象的数量。在构造函数中递增该变量,在析构函数中递减该变量。
- 静态成员函数:在每个派生类中实现一个静态成员函数,用于获取这个统计数量。
代码实现
#include <iostream>
// 基类模板
template <typename T>
class Base {
public:
Base() { ++count; }
virtual ~Base() { --count; }
static size_t getCount() { return count; }
protected:
static size_t count;
};
template <typename T>
size_t Base<T>::count = 0;
// 第一层派生类模板
template <typename T>
class Derived1 : public Base<T> {
public:
Derived1() : data1(0) {}
void setData1(T value) { data1 = value; }
T getData1() const { return data1; }
static size_t getCount() { return Base<T>::getCount(); }
private:
T data1;
};
// 第二层派生类模板
template <typename T>
class Derived2 : public Derived1<T> {
public:
Derived2() : data2(0) {}
void setData2(T value) { data2 = value; }
T getData2() const { return data2; }
static size_t getCount() { return Base<T>::getCount(); }
private:
T data2;
};
// 第三层派生类模板
template <typename T>
class Derived3 : public Derived2<T> {
public:
Derived3() : data3(0) {}
void setData3(T value) { data3 = value; }
T getData3() const { return data3; }
static size_t getCount() { return Base<T>::getCount(); }
private:
T data3;
};
你可以使用以下方式测试这个继承体系:
int main() {
Derived3<int> obj1;
Derived3<int> obj2;
std::cout << "Number of Derived3<int> objects: " << Derived3<int>::getCount() << std::endl;
return 0;
}
在上述代码中:
Base
模板类是整个继承体系的基类,它包含一个静态成员变量count
用于统计对象数量,并提供了静态成员函数getCount
来获取这个数量。Derived1
模板类从Base
派生,增加了数据成员data1
和相关的访问函数。Derived2
模板类从Derived1
派生,增加了数据成员data2
和相关的访问函数。Derived3
模板类从Derived2
派生,增加了数据成员data3
和相关的访问函数。- 在
main
函数中,创建了两个Derived3<int>
对象,并通过调用getCount
函数输出对象的数量。