C++ 虚函数

具体详解可以参考这篇文章《C++ 虚函数表解析》;

关于C++虚函数的文章网上有很多,这里简明的说明一下;


C++虚函数的目的就是为了实现多态;

多态定义(C++大学教程(第二版)):通过继承相关的不同类,它们的对象能够对同一个函数调用做出不同相应。

                                                                        多态死通过虚函数实现的。当通过基类指针(或引用)请求适用虚函数时,C++在与对象关联的派生类中正确的选择重定义的函数。



示例1:

class CA
{


private:
static UINT prc( PVOID pParam )
{
CA * pCA = (CA*)pParam;


while(1)
{
Sleep(1000);
pCA->show();
}

return 0;
}


public:
CA()
{
// AfxBeginThread( prc, this );
}


public:
virtual void show()
{
AfxMessageBox("CA show");
}
};


class CB : public CA
{


public:
virtual void show()
{
AfxMessageBox("CB show");
}




};


class CC : public CA
{

public:
virtual void show()
{
AfxMessageBox("CC show");


};


void CTDlg::OnButtonClick() 
{
// TODO: Add your control notification handler code here

CA * pCA2CA = (CA*)(new CA);


pCA2CA->show();


CA * pCA2CB = (CA*)(new CB);
pCA2CB->show();


CA * pCA2CC = (CA*)(new CC );
pCA2CC->show();
 
}

运行结果:显示: CA, CB, CC 相应对话框;


注:这里的应用最典型的就是, shape的draw函数, 然后继承多种类型,然后具体实现;可以cpicture绘制图片, cline绘制线条等等;





示例2: 

class CA
{
 
private:
static UINT prc( PVOID pParam )
{
CA * pCA = (CA*)pParam; 

while(1)
{
Sleep(1000);
pCA->show();
}

return 0;
}


public:
CA()

AfxBeginThread( prc, this );
}


public:
virtual void show()
{
AfxMessageBox("CA show");
}
};


class CB : public CA


public:
virtual void show()
{
AfxMessageBox("CB show");


};


void CTDlg::OnButtonClick() 

{

CA * pCA2CB = (CA*)(new CB);

 //或者 new CB();

}

显示结果:AfxMessageBox("CB show");

注释:在线程中:CA * pCA = (CA*)pParam;   pCA其实指向了CB;  

           因为内存结构中,CB的开头部分CA后面部分是新添加的内容; 

           构造顺序是,先构造CA接着就是CB先添加的内容;

           通过示例2,可以知道父类可以预留接口然后自动调用;


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

chinabinlang

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值