一基础知识
1.继承和派生的概念
子类继承父类,父类派生子类
2.子类所继承的东西
除了“构造函数”和“析构函数”,父类所有成员函数,以及数据成员,都会被子类继承
father.h
#pragma once
#include<string>
#include<iostream>
using namespace std;
class father{
public:
father( string name , int age);
~father();
private:
string name;
int age;
}
father.cpp
#include"father"
father::father( string name , int age){
}
father::father(){
}
son.h
#include"father.h"
class son:public father{
public:
son (string name ,int age, string game)
~son();
private:
string game;
}
son.cpp
#include"son.h"
//创建son对象时,会调用构造函数
//会先调用父类的构造函数,用来初始化父类继承的数据
//再调用自己的构造函数,用来初始自己定义的数据
son::son(string name , int age , string game){
//没有体现父类的构造函数,那就会自动调用父类的默认构造函数,如果父类没有默认构造函数就会 报错
}
//当父类没有默认构造时更改方法
son::son( string name , int age , string game) :father(name , age){
}
son::~son(){
}
3.当子类与父类有重名方法时
子类对象先在自己定义的方法中寻找,如果有,就调用自己定义的方法,如果找不到,就到父类方法中寻找,如果还是找不到,就会发生报错
protected(保护)访问权限
子类在public继承下无法访问父类的私有成员
1.既想属性私有,又要被继承的子类成员函数直接使用可以将属性定义为protected
#pragma once
class father{
public:
father();
~father();
protected:
int age;
string name;
}
class son:public father{
public:
son();
~son();
void description();
private;
string game;
}
void son::description(){
cout<<this->age<<endl; //直接使用
cout<<this->name<<endl; //直接使用
cout<<this->game<<endl;
}
三种继承方式
继承前权限 | 被继承后权限 |
public | public |
protected | protected |
private | private |
继承前权限 | 被继承后权限 |
public | private |
protected | private |
private | private |
继承前权限 | 被继承后权限 |
public | protected |
protected | protected |
private | private |
小结:
public:继承全不变
private:继承全变私
protected:继承只把public降级为protected