面试题答案
一键面试从基类派生新类的主要步骤:
- 定义派生类的声明:使用
class
关键字,后跟派生类的名称,然后使用:
符号,接着指定继承方式(public
、protected
或private
)以及基类的名称。例如:
class DerivedClass : public BaseClass {
// 派生类成员声明
};
这里 DerivedClass
是派生类,BaseClass
是基类,public
是继承方式。
2. 实现派生类的成员:在类声明之后,可以定义派生类中新增的成员函数和成员变量。如果派生类需要重写基类的虚函数,也在这个步骤中实现。例如:
class BaseClass {
public:
virtual void print() {
std::cout << "BaseClass print" << std::endl;
}
};
class DerivedClass : public BaseClass {
public:
void print() override {
std::cout << "DerivedClass print" << std::endl;
}
};
派生新类后对原类层次结构在访问权限方面的变化:
- public继承:
- 基类的
public
成员在派生类中仍然是public
的。 - 基类的
protected
成员在派生类中仍然是protected
的。 - 基类的
private
成员在派生类中不可访问。
- 基类的
- protected继承:
- 基类的
public
成员在派生类中变为protected
的。 - 基类的
protected
成员在派生类中仍然是protected
的。 - 基类的
private
成员在派生类中不可访问。
- 基类的
- private继承:
- 基类的
public
成员在派生类中变为private
的。 - 基类的
protected
成员在派生类中变为private
的。 - 基类的
private
成员在派生类中不可访问。
- 基类的
无论哪种继承方式,派生类对象无法直接访问基类的 private
成员,但可以通过基类提供的 public
或 protected
接口来间接访问这些 private
成员。同时,派生类之间的访问权限遵循上述规则,不同继承方式会影响派生类对基类成员的访问以及派生类对象对基类成员的访问。