C++日记——Day12:派生类、public、protected、private、函数遮蔽问题

派生类:

类之间有一种层次关系,又父类(基类、超类),有子类(派生类)。

父类与子类构成的层次关系我们叫做继承。继承是面向对象程序设计的核心思想之一。

这种继承说白了,就是我们要先定义一个父类。父类中我么定义一些公用的成员变量,成员函数。我们通过继承父类来构成新的类:子类。所以,写代码时,我们只需要写和子类相关的一些内容即可。子类一般会比父类更加庞大。

#include "Human.h"
#include <iostream>

#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、引入的主要目的是为了实现子类对象调用父类中的重载版本,该函数在父类中的参数跟子类中的参数类型/个数不同

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值