C++虚函数问题

要触发动态绑定需要满足两个条件:
1.必须指定为虚函数;
2.必须通过基类类型的引用或指针进行函数调用;

Q1·虚函数和纯虚函数的区别?纯虚函数在类定义中 有 =0; 的赋值操作,本类中无法实现,必须下放子类实现
Q2·子类是否必须实现基类中的虚函数?
Q3·重写规则已经可以实现对同名方法的选择访问,为什么还需要虚函数机制?

---------------
基类类型引用和指针的关键点在于 静态类型 和 动态类型 可能不同;

静态类型:static type,在编译时可知的引用类型和指针类型;

动态类型:daynamic type,指针或者引用绑定的类型


实例和对象的区别:
Class CAnimal{...}; //类类型的定义;
CAnimal animal; //对象的声明;此时,animal只是 CAnimal 的一个 对象;
animal = new CAnimal();//对象的实例化;此时,可以说 animal 是 CAnimal 的一个 实例了;

---------------结构体的构造,拷贝构造,赋值运算定义---------

struct LUITSLIB_EXPORT HisAlarmEvent 
{
    QT_UINT16       u16DevId;                             //设备ID
    QT_UINT16       u16SigId;                             //信号ID
    //构造
    HisAlarmEvent(void)
    {
        memset(this, 0, sizeof(*this));
    }
    //拷贝构造
    HisAlarmEvent(const HisAlarmEvent & other)
    {
        memcpy(this, &other, sizeof(*this));
    }
    //赋值运算
    const HisAlarmEvent & operator = (const HisAlarmEvent & other)
    {
        memcpy(this, &other, sizeof(*this));
        return *this;
    }
};

-------父类非virtual 的析构函数的影响------

class CB
{
public:
virtual CB();
~CB();
}
class CInherit:CB
{
public :
virtual CInherit();
~CInherit();
}
int main()
{
CB  b = CInherit();
}
//b释放的时候只能调用到 ~CB() ,无法访问到~CInherit()
原因: 同仁解释为,b对象无法访问子类的非虚函数,没有建立对应的指针链接
--------构造函数末尾追加对成员和父类的赋值-----
class CB
{
public:
CB(int a);
}
class CA;
Class CInherit : CB
{
CA ca;
}
CInherit::CInherit(int a):CB(a),ca(a)
{
}
-------------
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值