C++ 基础语法&特性(4)-面向对象之继承和派生
C++支持多重继承,这是java所不具有的(java里可用接口变相实现此功能)
class 类名C; //若两个类相互包含,则可以前向声明一下 class 基类名{ /* 关于友元 基类的友元,不会继承到派生类 基类是别人的友元,则会继承(若重写了该函数,则需重新声明友元关系) 爹给你,儿子不一定给你。爹有权儿子也有权。 */ friend class 友元类F; //友元类F无法访问派生类,但F的子类可以访问本类私有成员 类名C c; //报错,只声明未定义,只能为指针、引用,不可为对象(因为不确定大小) 类名C *c; //正确 }; class 派生类名 : 继承方式说明符 基类1 [, 访问范围说明符 基类2] {//继承方式:public/protected/private /* 关于基类同名函数 重写时,基类里其他同名函数都将隐藏(即使参数不同) */ 返回值类型 方法名[参数表]{ 基类名::基类成员 //可通过域作用符访问基类同名成员,对象.基类名::基类成员 } }; /* 继承方式:≈对从基类继承的成员,在派生类重设访问权限 基类里成员访问权限大于继承方式的,重设为继承方式的值 若为公有继承,则: */ 基类名 变量=派生类对象; //派生类对象可赋值给基类对象 基类名 &变量=派生类对象; //派生类对象可以初始化基类引用 基类名 *变量=&派生类对象; //派生类对象的地址可以赋值给基类指针 派生类名 变量 = (派生类)基类对象; //×,反之不行,强制转换也不行 /* 派生类与基类互相转换 */ 派生类对象可直接转换为基类对象 // 不可访问基类中不存在的成员 派生类 *指针 = (派生类 *)&基类对象; //派生指针指向基类对象,需强制转换(自己把控安全,对象不可直接转换) 对于同名函数,调用时与定义时对象 or 指针类型有关(与对象实际类型无关,多态部分会讲虚函数) sizeof(派生类对象) //=基类成员【被覆盖也算】+派生类成员之和 (排除静态成员、函数(虚函数要算,下一篇会讲))
综上,派生类可从基类继承的包括:
成员变量 //静态成员为所有对象共享
成员函数 //友元不算、构造和析构排除
其他类赋予基类的友元权限
欢迎各位指点!