`

C++继承访问控制

阅读更多
C++允许在派生类对继承的方法访问控制重新定义,可以放松或者添加更严格的限制。
这点和Java是不同的,Java不能对继承过来的成员添加更严格的限制,因为这样会
"违反Liskov替换原则"。
而C++的多态是依赖于指针和引用的(当然Java也是reference),而指针或者引用
编译时的访问权限检查是检查指针或引用类型的,所以C++采取了一种看似不够直观的
设计:使用基类指针和引用访问多态调用派生类的方法,继承来的方法其访问控制与在派生类定义的访问控制无关,只于指针和引用类型定义的访问控制相关。这样既能够不违反"Liskov替换原则",又能够对继承的方法添加更严格的限制,而这中更严格的访问控制显的很鸡肋,可以将对象简单的被基类的指针或引用持有就可以突破。

#include <iostream>
using namespace std;

class A{
public:
    virtual void test(){
        cout << "A::test" << endl;
    }
};

class B: public A{
private:
    virtual void test(){
        cout << "B::test()" << endl;
    }
};

int main(){
    B b;
    A &a = b;
    a.test(); //ok B::test()
    //b.test(); compile error
};
分享到:
评论

相关推荐

    类继承的访问控制

    在类的继承成中public,protected,private这三种访问控制的区别,代码和注释相结合,适合初学者了解C++的各种访问控制区别。

    C++ 类访问控制的条件总结

    C++ 类访问控制的条件总结 最近在使用C++创建类的时候,忽然发现自己对于类访问控制 public,protected,private 的作用没有理解透彻,后来就查了些资料,这里以作记录。 访问控制 C++类的重要属性就是封装和继承。...

    C++继承中的访问控制实例分析

    主要介绍了C++继承中的访问控制,是面向对象程序设计中非常重要的知识点,需要的朋友可以参考下

    自主访问控制实验——DAC 基于RBAC1的访问控制实验

    题目1:自主访问控制实验; 要求:设计必需的界面环境, (1) 对主体、客体、权限进行定义和配置 (2) 对主体进行自主授权 (3) 对主体的访问权限进行控制实验 (4) 对主体进行传递授权的操作,通过实验观察系统...

    C++公有继承、保护继承和私有继承的区别

    在c++的继承控制中,有三种不同的控制权限,分别是public、protected和private。定义派生类时,若不显示加上这三个关键字,会使用默认的方式,用struct定义的类是默认public继承,class定义的类是默认private继承。...

    数组C++语言程序设计 继承与派生

    类的继承 类成员的访问控制 单继承与多继承 派生类的构造、析构函数 类成员的标识与访问

    鸡啄米:C++编程入门系列

    的访问控制之保护继承与私有继承) 鸡啄米:C++编程入门系列之三十九(继承与派生:派生类的构造函 数) 鸡啄米:C++编程入门系列之四十(继承与派生:派生类的析构函数) 鸡啄米:C++编程入门系列之四十一...

    C/C++ 公有继承、保护继承和私有继承的对比详解

     在c++的继承控制中,有三种不同的控制权限,分别是public、protected和private。定义派生类时,若不显示加上这三个关键字,就会使用默认的方式,用struct定义的类是默认public继承,class定义的类是默认private...

    C++讲义及习题指导

    (2)C++类中包含私有、公有和保护成员 类的访问控制机制体现在类的成员中可以有公有成员、私有成员和保护成员。对于外界而言,只需要知道对象所表现的外部行为,而不必了解内部实现细节。封装体现了面向对象方法的...

    C++课件 类、流、虚继承

    类成员的访问控制 类的继承与派生 单继承与多继承 派生类的构造、析构函数 类成员的标识与访问

    现代C++程序设计

    8.3 访问控制符的规范和多继承 8.4 继承、构造和析构 8.4.1 构造函数和析构函数回顾 8.4.2 基类和派生类的默认构造函数——没有参数 8.4.3 在重载的构造函数中使用参数 8.4.4 基类和派生类的析构函数 8.4.5 医生也...

    C++ Primer Plus学习(七)

    C++ Primer Plus学习(七),分为下面几个部分: 操作符重载 友元函数 类的继承 访问控制protected

    c.c++找工作面试重点结构图-mindmanager

    在派生类的类界面中,将这些访问声明放在合适的访问控制保留字之后,从而改变在派生类中该成员的访问控制方式。 重定义 如果在派生类中定义了一个函数原型与继承成员函数一模一样的成员函数,则该函数实现的函数体是...

    C++ Primer第四版【中文高清扫描版】.pdf

    17.3.3 多重继承派生类的复制控制 619 17.3.4 多重继承下的类作用域 620 17.3.5 虚继承 622 17.3.6 虚基类的声明 624 17.3.7 特殊的初始化语义 625 小结 628 术语 628 第18章 特殊工具与技术 631 18.1 优化内存分配...

    传智播客_C++基础课程讲义_v1.0.7

    3.2.1单个类的访问控制 6 3.2.2不同的继承方式会改变继承成员的访问属性 6 3.2.3“三看”原则 6 3.2.3派生类类成员访问级别设置的原则 6 3.2.4综合训练 6 3.3继承中的构造和析构 6 3.3.1类型兼容性原则 6 3.3.2继承...

    第一章C++视频介绍视频

    控制流语句:if-else, switch, for, while, do-while 函数定义与调用 数组与字符串 面向对象编程(OOP) 类与对象 封装、继承与多态 构造函数与析构函数 访问修饰符:public, private, protected 进阶特性 指针与...

    C++ 的三种访问权限与三种继承方式

    我们知道C++中的类,有三种访问权限(也称作访问控制),它们分别是public、protected、private。要理解它们其实也很容易,看下面了一个例子。 父类: class Person { public: Person(const string& name, int age) :...

    【全新正版】现代C++程序设计(原书第2版)

    8.3 访问控制符的规范和多继承 8.4 继承、构造和析构 8.4.1 构造函数和析构函数回顾 8.4.2 基类和派生类的默认构造函数——没有参数 8.4.3 在重载的构造函数中使用参数 8.4.4 基类和派生类的析构函数 8.4.5 医生也是...

Global site tag (gtag.js) - Google Analytics