C++03:封装->继承->多态

巧了我就是萌 提交于 2019-12-01 15:59:15

一.简介

 

二.使用继承

 

 

三.继承的调用顺序

#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:①能被基类函数 ②能被友元函数 ③能被子类函数 ④能被基类对象

 

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!