一个简单的继承

两个类,一个base,一个derive。并且两个类中都实现了虚函数fun1和非虚函数fun2,代码如下:

class CBaseClass  
{
public:
	CBaseClass(){}
	virtual ~CBaseClass(){}

	virtual void fun1(){std::cout<<"CBaseClass virtual-fun is running!"<<std::endl;};
	void fun2(){std::cout<<"CBaseClass non-virtual-fun is running!"<<std::endl;};

};

class CDeriveClass : public CBaseClass  
{
public:
	CDeriveClass(){};
	virtual ~CDeriveClass(){};

	virtual void fun1(){std::cout<<"CDeriveClass virtual-fun is running!"<<std::endl;};
	void fun2(){std::cout<<"CDeriveClass non-virtual-fun is running!"<<std::endl;};
};

通过main函数调用来验证调用的是哪个类的函数

int main(int argc, char* argv[])
{

	CBaseClass base;
	base.fun1();
	base.fun2();
	std::cout<<std::endl<<"----------------------------"<<std::endl;

	CDeriveClass derive;
	derive.fun1();
	derive.fun2();
	std::cout<<std::endl<<"----------------------------"<<std::endl;

	CBaseClass *pbase = new CDeriveClass;
	pbase->fun1();
	pbase->fun2();
	std::cout<<std::endl<<"----------------------------"<<std::endl;


	int tmp;
	std::cin>>tmp;
	return 0;
}

输出结果:

重点关注:
CBaseClass *pbase = new CDeriveClass;时,调用非虚函数时候,
变量作用域问题,当查找CBaseClass *pbase的函数时,首先从基类查找,若找到是虚函数,则查找子类,若不是虚函数,则不查找子类。
其他问题:
1.本例中类定义方式(实现和声明放在一起)属于隐式inline函数。
2.基类中的析构函数要定义成虚函数。
以上属于最近读 《Effective C++》关于这方面的收获!

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值