本文共 1862 字,大约阅读时间需要 6 分钟。
继承是面向对象程序设计中代码复用最重要的手段。通过继承,可以在保持基类特性的同时,扩展功能,产生新的类——派生类。这种机制使代码更加灵活且具有可复用性。
继承机制允许派生类在基类的基础上增添新的属性和行为。例如,Person
是基类,Student
是派生类。通过继承,派生类可以利用基类的功能,同时定义自己的独特逻辑。
继承关系决定了派生类对基类成员的访问级别。默认情况下,class
关键字使用私有继承(private
),struct
使用公有继承(public
)。建议always显式声明继承方式,以避免歧义。
public
继承是最常见的选择。protected
或 private
继承,除非有特殊需求。dynamic_cast
安全转换为派生类指针。RTTI
检测对象类型后再进行转换。Student sobj;Person pobj = sobj; // 可以赋值Person* pp = &sobj;Person& rp = sobj;// 错误示例sobj = pobj; // 基类对象不能赋值给派生类对象
class Person {protected: string _name; int _num;};class Student : public Person {public: void Print() { cout << " 姓名: " << _name << endl; cout << " 身份证号: " << _num << endl; cout << " 学号: " << _num << endl; }};
派生类会自动生成以下默认成员函数:
友元关系不能继承:
静态成员在继承中仅有一个:
virtual
关键字解决菱形继承的二义性问题。class Car {protected: string _color; string _num; Tire _tire;};class BMW : public Car {public: void Drive() { cout << "好开-操控" << endl; }};class Benz : public Car {public: void Drive() { cout << "好坐-舒适" << endl; }}class Tire {protected: string _brand; size_t _size;};
通过以上内容,可以清晰地理解继承的核心概念及其实际应用。
转载地址:http://tertz.baihongyu.com/