C++ 继承机制详解
一、概念与语法
继承是类设计层次复用的核心手段。在 C++ 中,基类(父类)定义了通用特性,派生类(子类)在此基础上扩展。
基本语法:
class Person { /* ... */ };
class Student : public Person { /* ... */ };
继承关系决定了访问权限的传递规则。基类的私有成员虽然被继承到了派生类对象中,但在语法层面不可见。这意味着无论你在派生类内部还是外部,都无法直接访问基类的私有成员。如果希望某些成员在基类外不可见,但允许派生类访问,应将其定义为 protected。
访问权限遵循以下原则:基类成员在子类的访问方式取决于 Min(成员在基类的访问限定符,继承方式)。即 public > protected > private。
二、对象赋值与类型转换
不同类型对象赋值时涉及类型转换,但在继承体系中有一些特殊规则。
- 父类不能赋值给子类:即使强转也不行。因为父类对象不包含子类特有的成员变量,强行赋值会导致数据丢失或随机值。
- 子类可以赋值给父类:这是赋值兼容(切片/Slicing)。将子类对象中属于父类的部分拷贝给父类对象,子类特有部分会被丢弃。
- 指针与引用:子类对象可以赋值给父类的指针或引用,这不会发生切片,而是指向同一块内存区域的不同视角。
class Person {
public:
void Print() { cout << "name:" << _name << endl; }
protected:
string _name = "peter";
int _age = 18;
};
class Student : public Person {
protected:
int _stuid;
};
int main() {
Person p;
Student s;
// s = p; // 错误:父类不能赋值给子类
p = s; // 正确:发生切片,只拷贝 Person 部分
return 0;
}


