一.简介
二.使用继承
三.继承的调用顺序
#pragma once
#include <iostream>
using namespace std;
class F{
public:
F(){ k5 = 10; cout << "F:F()" << endl; }
~F(){ cout << "F:~F()" << endl; }
//virtual ~F(){}
void FuncA(){ cout << "F:FuncA()" << endl; }
virtual void FuncB() { cout << "F::FuncB()" << endl; }
int k5;
protected:
int k4;
};
class Z : public F{
public:
Z(){ k5 = 5; cout << "Z:Z()" << endl; }
~Z(){ cout << "Z:~Z()" << endl; }
void FuncA(){ cout << "Z::FuncA()" << endl; }
void FuncB() { cout << "Z::FuncB()" << endl; }
int k5;
protected:
int k4;
};
#include "Jicheng.h"
int main()
{
F* a = new F(); //F()
cout << endl;
F* a1 = new Z(); //F() Z()
cout << endl;
Z* a2 = new Z(); //F() Z()
cout << endl;
//Z* a3 = new F(); 错误
a->FuncA(); //F:FunA()
a1->FuncA(); //F:FunA()
a2->FuncA(); //Z:FunA() 如果子类没有相应的函数,那么会调用父类的函数
a->FuncB(); //F:FunB()
a1->FuncB(); //Z:FunB()
a2->FuncB(); //Z:FunB()
int k5 = a->k5; //10
int k4 = a1->k5; //10
int k3 = a2->k5; //5
//int k55 = a->k4; k4是保护成员,无法访问
delete a; //~F()
cout << endl;
delete a1; //如果父类析构函数加virtual 那么会多一个子类的析构函数 ~Z() ~F()
cout << endl;
delete a2; //~Z() ~F()
cout << endl;
system("pause");
return 0;
}
四.继承的访问权限
1.继承访问权限
父类的private成员无法被继承
(1)public继承:父类的public/protected成员继承到子类的访问权限不变
(2)private继承:父类的public/protected成员继承到子类变为private
(3)protected继承:父类的public/protected成员继承到子类变为protected
2.成员访问权限
(1)private:①能被基类函数 ②能被友元函数 访问,无法被基类对象访问
(2)protected:①能被基类函数 ②能被友元函数 ③能被子类函数 访问,无法被基类对象访问
(3)public:①能被基类函数 ②能被友元函数 ③能被子类函数 ④能被基类对象