C++ 基础语法&特性(4)-面向对象之继承和派生

 

C++相关文章

 

C++支持多重继承,这是java所不具有的(java里可用接口变相实现此功能)

 

class 类名C; //若两个类相互包含,则可以前向声明一下
class 基类名{
    /*
        关于友元
        基类的友元,不会继承到派生类 
        基类是别人的友元,则会继承(若重写了该函数,则需重新声明友元关系) 
        爹给你,儿子不一定给你。爹有权儿子也有权。 
    */
    friend class 友元类F;    //友元类F无法访问派生类,但F的子类可以访问本类私有成员 
    
    类名C c;    //报错,只声明未定义,只能为指针、引用,不可为对象(因为不确定大小)  
    类名C *c;    //正确 
};


class 派生类名 : 继承方式说明符 基类1 [, 访问范围说明符 基类2] {//继承方式:public/protected/private     
     /*
         关于基类同名函数
        重写时,基类里其他同名函数都将隐藏(即使参数不同) 
     */
     返回值类型 方法名[参数表]{
         基类名::基类成员    //可通过域作用符访问基类同名成员,对象.基类名::基类成员 
     } 
};

/*
    继承方式:≈对从基类继承的成员,在派生类重设访问权限 
        基类里成员访问权限大于继承方式的,重设为继承方式的值 
    若为公有继承,则: 
*/
基类名 变量=派生类对象;     //派生类对象可赋值给基类对象
基类名 &变量=派生类对象; //派生类对象可以初始化基类引用
基类名 *变量=&派生类对象; //派生类对象的地址可以赋值给基类指针
派生类名 变量 = (派生类)基类对象;   //×,反之不行,强制转换也不行
/*
    派生类与基类互相转换 
*/ 
派生类对象可直接转换为基类对象    // 不可访问基类中不存在的成员
派生类 *指针 = (派生类 *)&基类对象;        //派生指针指向基类对象,需强制转换(自己把控安全,对象不可直接转换) 

对于同名函数,调用时与定义时对象 or 指针类型有关(与对象实际类型无关,多态部分会讲虚函数) 


sizeof(派生类对象)    //=基类成员【被覆盖也算】+派生类成员之和 (排除静态成员、函数(虚函数要算,下一篇会讲)) 

 综上,派生类可从基类继承的包括:

  成员变量  //静态成员为所有对象共享

  成员函数  //友元不算、构造和析构排除 

  其他类赋予基类的友元权限

 

posted @ 2021-01-27 10:26  寻觅~~  阅读(95)  评论(0编辑  收藏  举报