一.简介
二.使用继承
三.继承的调用顺序
#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:①能被基类函数 ②能被友元函数 ③能被子类函数 ④能被基类对象