第二节 · 宗族的继承 · 基类与派生类
继承是面向对象的核心概念之一,它允许我们基于已有的类创建新类,复用代码并建立类之间的层次关系。
基本继承
// 基类(父类)
class Animal
{
protected:
string name;
public:
Animal(const string& n) : name(n) {}
void eat()
{
cout << name << " is eating." << endl;
}
};
// 派生类(子类)
class Dog : public Animal
{
public:
Dog(const string& n) : Animal(n) {} // 调用基类构造函数
void bark()
{
cout << name << " says: Woof!" << endl;
}
};
int main()
{
Dog d("Buddy");
d.eat(); // 继承自 Animal
d.bark(); // Dog 自己的方法
return 0;
}继承方式
继承方式
基类 public
基类 protected
基类 private
public
public
protected
不可访问
protected
protected
protected
不可访问
private
private
private
不可访问
最常用的是 public 继承。
构造和析构顺序
规则:构造从基类到派生类,析构从派生类到基类。
方法覆盖
调用基类构造函数
protected 成员
多层继承
is-a 关系
继承表达的是 "is-a" 关系:
如果不是 "is-a" 关系,考虑用组合而非继承:
隐藏基类成员
用 using 声明可以恢复:
习题
设计一个形状类层次结构:Shape → Rectangle, Circle, Triangle。
解释 public、protected、private 继承的区别。
什么时候应该用继承,什么时候用组合?
Last updated