MST

星途 面试题库

面试题:C++模板类派生非模板类:基础规则考察

请简述在C++中,从模板类派生非模板类时,在成员访问权限方面需要注意什么?并给出一个简单的代码示例。
34.3万 热度难度
编程语言C++

知识考点

AI 面试

面试题答案

一键面试
  1. 成员访问权限注意事项
    • 从模板类派生非模板类时,遵循一般的C++继承访问权限规则。
    • 若模板类中的成员在模板类中是public,在派生类中访问权限取决于继承方式。例如,使用public继承,模板类的public成员在派生类中仍为public;使用protected继承,模板类的public成员在派生类中变为protected;使用private继承,模板类的public成员在派生类中变为private
    • 对于模板类的protected成员,publicprotected继承时,在派生类中仍可访问,private继承时,在派生类中不可访问。
    • 模板类的private成员,无论何种继承方式,在派生类中都不可直接访问。
  2. 代码示例
// 模板类定义
template <typename T>
class TemplateBase {
public:
    T public_member;
protected:
    T protected_member;
private:
    T private_member;
public:
    TemplateBase(T p, T pr, T prt) : public_member(p), protected_member(pr), private_member(prt) {}
};

// 从模板类派生的非模板类
class Derived : public TemplateBase<int> {
public:
    Derived(int p, int pr, int prt) : TemplateBase<int>(p, pr, prt) {}
    void accessMembers() {
        // 可以访问public_member
        int public_val = public_member;
        // 可以访问protected_member
        int protected_val = protected_member;
        // 不能访问private_member,下面这行代码会报错
        // int private_val = private_member; 
    }
};