- 成员访问权限注意事项:
- 从模板类派生非模板类时,遵循一般的C++继承访问权限规则。
- 若模板类中的成员在模板类中是
public
,在派生类中访问权限取决于继承方式。例如,使用public
继承,模板类的public
成员在派生类中仍为public
;使用protected
继承,模板类的public
成员在派生类中变为protected
;使用private
继承,模板类的public
成员在派生类中变为private
。
- 对于模板类的
protected
成员,public
和protected
继承时,在派生类中仍可访问,private
继承时,在派生类中不可访问。
- 模板类的
private
成员,无论何种继承方式,在派生类中都不可直接访问。
- 代码示例:
// 模板类定义
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;
}
};