C++基础知识,C++11中的多态和重载,函数遮蔽,using多态的引入

试验类的定义:
Human.h

#ifndef __HUMAN__
#define __HUMAN__
class Huamn
{
public:
	Huamn();
	Huamn(int);
	void SameNameMethod();
	void SameNameMethod(int);
public:
	int a;
};
#endif // !__HUMAN__

Human.cpp

#include "Human.h"
#include<iostream>
Huamn::Huamn()
{
	std::cout << "调用了Human无参构造函数" << std::endl;
}
Huamn::Huamn(int a) :a(a)
{
	std::cout << "调用了Human一参构造函数" << std::endl;
}
void Huamn::SameNameMethod()
{
	std::cout << "调用了Huamn::SameNameMethod()" << std::endl;
}
void Huamn::SameNameMethod(int)
{
	std::cout << "调用了Huamn::SameNameMethod(int)" << std::endl;
}

Man.h

#ifndef __MAN__
#define __MAN__
#include"Human.h"
class Man :public Huamn
{
public:
	Man();
	void SameNameMethod();
	using Huamn::SameNameMethod;
};
#endif // !__HUMAN__

Man.cpp

#include "Man.h"
#include<iostream>
Man::Man()
{
	std::cout << "调用了Man无参构造函数" << std::endl;
}
void Man::SameNameMethod()
{
	Huamn::SameNameMethod();
	Huamn::SameNameMethod(12);
	std::cout << "调用了Man::SameNameMethod()" << std::endl;
}

派生类,子类 / 父类,超类

  • 继承:派生类对象定义时调用构造函数顺序:
    先调用父类构造函数,在调用子类构造函数
Man man;

执行效果:
在这里插入图片描述

访问权限的设置

权限:public,protected,private
继承方式,成员按照父类中成员的访问权限和子类的继承方式中,最低访问权限进行继承,
protected,成员函数,对象不能调用,但是类中的函数可以调用

函数遮蔽

意思就是,父类中某个函数名重载了很多不同的方法,在子类继承中,如果子类写了一个同名的函数
那么父类中所有同名的重载函数,均不能调用,很不合理,但就是这样
解决方法:

  • 1、可以在子类的函数中进行,父类::函数名()的方式进行调用
man.SameNameMethod();
//Man类,Huamn类中如何写的可以看开头的代码

执行效果:
在这里插入图片描述

  • 2、c++11中引入了using的概念,就是为了让父类中的重载函数在子类中以多态的形式进行调用。
man.SameNameMethod(12);

执行效果:
在这里插入图片描述

发布了157 篇原创文章 · 获赞 167 · 访问量 2万+

猜你喜欢

转载自blog.csdn.net/qq_40666620/article/details/102890185