C++ 继承机制详解
一、概念
继承是类设计层次复用的核心手段。通过继承,子类可以复用父类的成员,并在此基础上扩展新功能。
语法示例:
class Person { /* ... */ };
class Student : public Person { /* ... */ };
这里 Person 是基类(父类),Student 是派生类(子类)。
继承关系与访问限定符
继承方式决定了基类成员在派生类中的可见性。常见的继承方式有 public、protected 和 private。
- 私有成员(private):即使被继承,在派生类内部及外部依然不可见。只能在基类内部访问。
- 保护成员(protected):如果不想让基类成员在类外直接访问,但希望派生类能访问,应定义为
protected。 - 公共成员(public):在派生类中的访问权限取决于继承方式。规则是取两者中较严格的限制:
public > protected > private。
二、基类和派生类对象赋值转换
不同类型对象赋值涉及类型转换问题。
class Person {
public:
void Print() { cout << "name:" << _name << endl; }
protected:
string _name = "peter";
int _age = 18;
};
class Student : public Person {
protected:
int _stuid;
};
关键规则:
- 父类对象不能赋值给子类对象:因为子类可能有特有成员,父类对象无法提供这些值,强转也无法解决逻辑问题。
- 父类指针/引用可以指向子类对象:这是实现多态的基础。
- 子类对象可以赋值给父类对象:这被称为'切片'(Slicing)。只拷贝父类那部分数据,子类特有的成员会被丢弃。
int {
Person p;
Student s;
p = s;
;
}


