美文网首页C++ 杂记
C++ 类的继承与派生(三)保护继承

C++ 类的继承与派生(三)保护继承

作者: 赵者也 | 来源:发表于2017-01-06 22:36 被阅读12次

注意:本文中代码均使用 Qt 开发编译环境
保护继承(protected)
(1)基类的public和protected成员都以protected身份出现在派生类中,但基类的private成员不可访问
(2)派生类中的成员函数可以直接访问基类中的public和protected成员,但不能访问基类的private成员
(3)通过派生类的对象不能访问基类的任何成员

protected成员的特点与作用
(1)对建立其所在类对象的模块来说(水平访问时),它与private成员的性质相同
(2)对于其派生类来说(垂直访问时),它与public成员的性质相同
(3)即实现了数据的隐藏,又方便继承,实现代码重用

一个错误做法的实例:

class A{
protected:
    int x;  // 内部可用
};

int main(){ //外部不能用
    A a;
    a.x=5;  //错误!!!只有public可以这样用
}

例如:保护继承举例

#include <QCoreApplication>
#include <QDebug>

class Point {
public:
    void initP(float xx=0,float yy=0){
        X = xx;
        Y = yy;
    }

protected:
    void move(float xOff,float yOff){
        X += xOff;
        Y += yOff;
    }

    float getX(){
        return X;
    }

    float getY(){
        return Y;
    }

private:
    float X,Y;
};



class Rectangle:protected Point {
public:
    void initR(float x, float y, float w, float h){
        initP(x,y);
        W = w;
        H = h;
    }

    void move(float xOff,float yOff){
        Point::move(xOff,yOff);//访问基类私有成员
    }

    float getX(){
        return Point::getX();
    }

    float getY(){
        return Point::getY();
    }

    float getH(){
        return H;
    }

    float getW(){
        return W;
    }

private:
    float W,H;
};

int main(int argc, char *argv[])
{
    QCoreApplication a(argc, argv);

    Rectangle rect;
    rect.initR(2,3,20,10);
    rect.move(3,2);

    qDebug() << rect.getX() << "," << rect.getY() << ","
             << rect.getW() << "," << rect.getH();

    return a.exec();
}

运行结果:
5 , 5 , 20 , 10

相关文章

  • [C++之旅] 18 公有继承、保护继承和私有继承

    [C++之旅] 18 公有继承、保护继承和私有继承 继承 继承的类称为派生类或子类,被继承的类称为基类或父类。继承...

  • C++ 类的继承与派生(三)保护继承

    注意:本文中代码均使用 Qt 开发编译环境保护继承(protected)(1)基类的public和protecte...

  • 2017.9.18

    Class派生类名:继承方式 基类名{派生类中的新成员}公有继承:public 私有继承:private 保护继承...

  • 9月18日C++学习总结

    1.派生类的三种继承方式:1)公有继承:public 2)私有继承:private 3)保护继承:protecte...

  • c++继承

    在C++语言中,一个派生类可以从一个基类派生,也可以从多个基类派生。从一个基类派生的继承称为单继承;从多个基类派生...

  • 9.18

    class 派生类名:继承方式 基类名{ 派生类中的新成员 } 派生有三种继承方式: 1.公有继承:public ...

  • Java学习笔记三:继承、封装、多态

    一、继承 (1)继承知识点 父类也称作超类、基类、派生类等。 Java中只有单继承,没有像C++那样的多继承。多继...

  • C++ 类继承

    C++类的继承要点: 派生类不能直接访问基类的私有成员变量,只能通过基类的公有或保护方法进行访问。 创建派生类对象...

  • 12. C++多继承 二义性 虚基类

    12.1 继承 派生类都只有一个基类,称为单继承。同时C++也支持多继承,即一个派生类可以有两个或多个基类。 注意...

  • 9.18 c++总结

    1.派生 class 派生类名:继承方式 基类名 { 派生类中的新成员} 2.三种继承方式: 公有继承:publ...

网友评论

    本文标题:C++ 类的继承与派生(三)保护继承

    本文链接:https://www.haomeiwen.com/subject/ufvxbttx.html