关于类的继承,多态

1.首先,说一下类的继承:
基类是CAnimal:

class CAnimal
{
protected:
	CString m_cstrName = L"";
	int m_nShoutNum = 3;
public:
	CAnimal();
	CAnimal(CString name);
	~CAnimal();


public:
	int GetShoutNum();
	void SetShoutNum(int nValue);
	
	virtual CString Shout();//先不看这个
};

2.然后写一下派生类CCat
代码如下:

#include "Animal.h"
class CCat:public CAnimal
{
public:
	CCat(CString name);
	CCat();

	~CCat();
public:
	CString Shout();
	void SetShoutNum(int nValue);
};

主要是public继承。
还有派生类CDog

class CDog :
	public CAnimal
{
public:
	CDog();
	CDog(CString name);

	~CDog();
public:
	CString Shout();
};

3.然后注意

GetShoutNum()函数是基类有的。
CString Shout();函数是派生类有的。
void SetShoutNum(int nValue);函数是派生类和基类都有的。

4.关键时刻到了

CCat cat(L"234");
cat.SetShoutNum(4);//这里就会进派生类的SetShoutNum函数
CString cstrCatShout = cat.Shout();//这里毫无疑问就是进派生类的
CDog dog(L"123");
dog.SetShoutNum(2);//这里就会进基类的SetShoutNum函数
CString cstrCatShout = dog.Shout();//这里毫无疑问就是进派生类的

直接实例化的两个对象cat和dog。
调用的函数就是你重写了就调用派生类的。
你没有重写就调用基类的。
但是实例化的时候要实例化派生类
实例化基类就不行了。这就是继承。

5.关于多态。
多态表示不同的对象可以执行相同的动作,但要通过它们自己的实现代码来执行。
第一:子类以父类的身份出现。
第二:子类在工作时以自己的方式实现。
第三:子类以父类的身份出现时,子类特有的属性和方法不可以使用。(不清楚)

第四:纯虚函数是虚函数再加上=0;(可以不用在基类里实现该函数)
举例:纯虚函数:virtual void fun()=0;即抽象类!必须在子类实现这个函数,即先有名称,没有内容,在派生类中实现内容。

第五:抽象类是指包括至少一个纯虚函数的类。

为了使子类的实例完全接替来自父类的类成员,父类必须将该成员声明为虚拟的。
这是通过在该成员的返回类型之前添加virtual关键字来实现的。

解释一下上面的那段话,就是实例化一个基类。
然后基类调用的函数都是基类自带的。
但是如果基类想用派生类的函数,就需要在基类里写一个虚函数。(前面加virtual)
举例如下:

CAnimal *testAnimal1 = new CCat(L"咪咪");
testAnimal1->SetShoutNum(2);//这个函数就只会调用基类的
CString cstrAnimalShout=testAnimal1->Shout();//这个就会调用派生类的

CAnimal *testAnimal2 = new CDog(L"小黑");
testAnimal2->SetShoutNum(3);
cstrAnimalShout = testAnimal2->Shout();//这个就会调用派生类的

实例化的时候不同,Shout函数使用的是不同派生类的。这个就是多态。
程序会自动去找new的对象是什么,然后这个对象的Shout()函数是什么。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值