C++57个入门知识点

C++57个入门知识点,第1张

C++57个入门知识点

本篇主要介绍C++中函数覆盖、重载、隐藏如何判断什么时候被使用?
实际使用过程中很少会出现几种类型一起出现的情况,因此作为理解及未来细品之用。
1.总结:

2.学习视频地址:
函数覆盖、重载、隐藏的调用秘笈1
函数覆盖、重载、隐藏的调用秘笈2
3.学习笔记:

#include 

class base {
public:
	virtual void Handle1(float x)
	{
		printf("base::Handle1(float)");
	}
	void Handle2(float x)
	{
		printf("base::Handle2(float)");
	}
	void Handle3(float x)
	{
		printf("base::Handle3(float)");
	}
};

class Derived :public base {
public:
	//父类中已经声明为虚函数,子类中virtual可写可不写
	//同名,参数返回值等一致,构成覆盖
	virtual void Handle1(float x)
	{
		printf("base::Handle1(float)");
	}
	//与父类函数的同名函数构成了函数隐藏
	void Handle2(float x)
	{
		printf("base::Handle2(float)");
	}
	//与父类函数的同名函数构成了函数隐藏
	void Handle3(float x)
	{
		printf("base::Handle3(float)");
	}
	//与子类中的同名函数构成函数同在,作用域、函数名、作用域相同
	void Handle3(double x)
	{
		printf("base::Handle3(double)");
	}
};



int main(int argc,char* argv[])
{
	Derived DervObj;
	base *pbase = &DervObj;//子类对象指针强转为父类指针
	Derived *pDerv= &DervObj;//将子类变换为指针形式
	
	base baseObj;
	base *pbase2 = &baseObj;

	//间接调用,查子类虚表,子类对象有函数覆盖,调用子类的Handle1
	pbase->Handle1(3.14f);

	//Handle1虚函数,pbase2为指针,间接调用:看对象,查父类的虚表,调用父类Handle1
	pbase2->Handle1(3.14f);

	//有类域限制,直接调用:查找base作用域中的Handle1,调用父类Handle1(函数重载)
	//找到最佳匹配的函数
	//	(i)找到多个则提示二义性
	//	(ii)找不到则向该类域的上一层查找(父类)
	//		一旦在某一个类域中找到该函数,则不会向上查找(函数隐藏规则)

	pbase->base::Handle1(3.14f);

	pDerv->Handle1(3.14f);

	pbase->Handle2(3.14f);
	pDerv->Handle2(3.14f);

	pbase->Handle3(3.14f);
	pDerv->Handle3(3.14f);
	pDerv->Handle3(3.14);

	return 0;
}


欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/zaji/4995129.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2022-11-14
下一篇2022-11-14

发表评论

登录后才能评论

评论列表(0条)

    保存