C++类与继承

类与继承:
class cBase//基类
{
private:
int m_iPrivateBaseData;//私有成员只能由类自身成员访问,子类不能访问
public:
cBase(int arg) : m_iPrivateBaseData(arg){};//基类构造函数
virtual void VirtualBaseFunc(){return m_iProtectedBaseData;};//基类虚函数
int baseFuncConst() const {return m_iPrivateBaseData;}//基类const的函数,不能对其数据成员进行修改操作,如return ++m_iPrivateBaseData是非法的。

protected:
int m_iProtectedBaseData;//受保护成员只能有基类或者派生类成员访问
static int staticProtectdBaseFunc()
};

class cDerived;//派生类声明与一般类的声明一样
class cDerived : public cBase 派生类的定义
{
private: 
const int m_iConstPrivateDerivedData = 1;
int m_iPrivateDerivedData = 0;
public:
cDerived(int iBaseArg1,int iDeriArg1) : cBase(iBaseArg1),m_iPrivateDerivedData(iDeriArg1){};//基类构造函数初始化基类成员,派生类构造函数初始化派生类成员(派生类和基类各自初始化自身对应的数据成员),不指定则各自执行默认初始化构造函数。
void VirtualBaseFunc() override{return ++m_iProtectedBaseData}//override显式的说明此函数覆盖基类虚函数
int derivedFunc(){};

};


const cBase cBaseObj;//基类常量对象
cDerived cDerivedObj1;//调用默认初始化构造函数
cDerived cDerivedObj2(1,1);//调用带参数构造函数
cBase *cBasePtr = cDerivedObj1;//基类指针绑定子类对象
cBase &cBaseInvok = cDerivedObj2;//基类引用绑定子类对象
cBasePt->VirtualBaseFunc();//基类指针动态调用子类函数
cBaseInvok.derivedFunc();基类引用动态调用子类函数

cDerivedObj1.staticProtectedBaseFunc();//基类中的静态成员函数或成员变量在整个基类和派生类整体中只存在唯一定义和唯一实例,子类可以访问。即不同对象实例访问静态成员时,都访问的是同一个静态成员。

cBaseObj.baseFuncConst();/类的/常量对象只能访问类的常量成员函数


附录:
1.防止继承 : 
class noDerived final{};//该类不能作为基类
int noDerivedFunc() final{};//fanal关键字说明此成员函数不能被重写覆盖
2.虚函数的默认实参:
具体使用基类的默认实参还是派生类的默认实参,由调用对象的静态类型决定(基类指针或引用调用子类虚函数,使用基类的默认实参)
3.回避虚函数的动态绑定机制:
使用作用域运算符   ::指定到底使用基类还是派生类的函数定义 basePtr->base::virtualFunc()
4.纯虚函数和抽象基类:
纯虚函数无须定义,在函数声明后面=0;
含有或者继承了未经覆盖的纯虚函数是抽象基类,不能为抽象基类定义对象。
5.三种继承方式(派生访问说明符)对于继承类的成员没有什么影响,主要是为了控制派生类对象或者派生类的派生类成员对基类成员的访问
6.class默认私有继承,struct默认共有继承(没有动态绑定特性)
7.使用using将私有继承基类中的可访问成员单独列出,用于派生类用户访问
protected:
using base::proctectedBaseMem;
8.派生类重写基类中的非虚函数或成员,会将基类中的函数或者成员隐藏掉。可以通过作用域运算符::访问
9.虚析构函数

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值