试验类的定义:
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);
执行效果: