栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

C++57个入门知识点

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

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;
}


转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/396313.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号