类之间有一种层次关系,又父类(基类、超类),有子类(派生类)。
父类与子类构成的层次关系我们叫做继承。继承是面向对象程序设计的核心思想之一。
这种继承说白了,就是我们要先定义一个父类。父类中我么定义一些公用的成员变量,成员函数。我们通过继承父类来构成新的类:子类。所以,写代码时,我们只需要写和子类相关的一些内容即可。子类一般会比父类更加庞大。
#include "Human.h"
#include
#ifndef __MAN_H_
#define __MAN_H_
class Man : public Human //表示Man是Human的子类
{
public:
Man();
Man(int);
public:
int m_Age;
char m_Name[100];
};
#endif
class Man : public Human
格式:class 子类名:继承方式 父类名
继承方式(访问等级/访问权限):public/protected/private
class Car{
public:
Car(){
cout << "父类Car" << endl;
}
};
class redCar{
public:
redCar(){
cout << "子类redcar" << endl;
}
};
int main(){
redCar redcar; //先输出 父类Car
//在输出 子类redcar
}
public:内外均可以正常访问。
protected:如果希望外界无法访问,仅供内部使用,而且子类可以继承则定义为protected。
private:如果希望仅供类内部使用,而且不希望子类继承这个成员则定义为private。
子类中如果有一个同名函数,就会导致父类中不管有几个同名函数,子类中都无法访问,同名虚函数也一样会引起函数遮蔽问题。如果我们确实想调用父类中的同名函数:
1、在子类的成员函数中,用"父类::成员函数"
void Man::samefunc(){
Human::samefunc();
}
2、using:C++11中,让父类同名函数在子类中可见。
//Human.h
class Human{
public:
void samefunc(){};
};
//Man.h
#include "Human.h"
class Man : public Human{
public:
void samefunc(int);
using Human::samefunc;
};
说明:
a、using Human::samefunc:只能指定函数名,则凡是基类中的public,protected函数samefunc在子类都可见。你无法让一部分父类中的同名函数在子类中可见。
b、引入的主要目的是为了实现子类对象调用父类中的重载版本,该函数在父类中的参数跟子类中的参数类型/个数不同