今天在写代码时发现对继承后的函数访问权限不太清楚,于是自己做了个测试:

1.头文件(test.h)

  1. 1 #include <iostream> 
    2 using namespace std;

    3
  2. class A{
  3. private:
  4. void print(){
  5. cout << "this is A" << endl;
  6. }
  7. };
  8. class B:public A{
    };

    A为基类,B为A的子类.

2.源文件(test.cpp)

  1. #include "test.h"
  2.  
  3. void main()
  4. {
  5. B* pB = new B();
  6. pB->print();
  7.  
  8. getchar();
  9. getchar();
  10. }

    因为B从A类继承了函数print并且同时继承了print的访问权限,所以此时编译不通过.

3.修改后的头文件(test.h)

  1. #include <iostream>
  2. using namespace std;
  3.  
  4. class A{
  5. private:
  6. void print(){
  7. cout << "this is A" << endl;
  8. }
  9. };
  10.  
  11. class B:public A{
  12. public:
  13. void print(){
  14. cout << "this is B" << endl;
  15. }
  16. };

    子类B重写了A的print函数,此时编译成功,运行如下:

4.总结

    当一个类从另一个类继承后,基类成员函数的访问权限为默认的继承权限,若子类自己重写了此函数,则访问权限变更为子类设置的访问权限.简言之,子类设置的函数访问权限优先于从基类继承后语法默认的访问权限.

C++继承后的函数访问权限的更多相关文章

  1. 窥探Swift之类的继承与类的访问权限

    上一篇博客<窥探Swift之别具一格的Struct和Class>的博客可谓是给Swift中的类开了个头.关于类的内容还有很多,今天就来搞一下类中的继承以及类的访问权限.说到类的继承,接触过 ...

  2. Swift 之类的继承与类的访问权限

    http://www.cocoachina.com/swift/20160104/14821.html 上一篇博客<窥探Swift之别具一格的Struct和Class>的博客可谓是给Swi ...

  3. CPP/类/成员函数访问权限2

    // main.cpp // OOL // Created by mac on 2019/4/4. // Copyright © 2019年 mac. All rights reserved. // ...

  4. C++入门经典-类成员的可访问性,继承后的可访问性

    1:关键字public.private.protected说明类成员是共有的.私有的,还是保护的.这3个关键字将类划分为3个区域,在public区域的类成员可以在类作用域外被访问,而private区域 ...

  5. php类的继承(基本概念,访问权限修饰符,重写override)

    类的继承 简单理解: 某个类A具有某些特征,另一个类B,也具有A类的所有特征,并且还可能具有自己的更多的一些特征,此时,我们就可以实现:B类使用A的特征信息并继续添加自己的一些特有特征信息. 基本概念 ...

  6. CPP/类/成员函数访问权限

  7. java基础 4 继承(1)访问权限与作用域

    作用域与可见性 当前类 同一package 子类 其他package public √ √ √ √ protected √ √ √   defalut √ √     private √      

  8. C++ 继承的访问权限

    1.它解决什么问题?为什么设计出继承的各种访问权限? 可以这样认为,C++继承会把父类的东西拉到自己这里,这些东西都是自己的,父类中的字段和方法都有访问权限,如果我想改变这些东西的访问权限,该怎么办? ...

  9. java:访问权限

    访问权限四大类:权限从大->小 1.public:   公共权限 2.protected:  受保护权限 3.default: 包级别访问权限/默认权限 4.private:   私有权限 以p ...

随机推荐

  1. Linux c- libevent

    libevent是一个事件触发的网络库,适用于windows.linux.bsd等多种平台,内部使用select.epoll.kqueue等系统调用管理事件机制.著名分布式缓存软件memcached也 ...

  2. postman参数化的方法

    1.准备csv格式的文件(注意第一行是是引用参数的名称) 2.编写请求,应用变量参数,并且设置断言 引用变量参数 3.把这个请求的文件夹runner一下批量执行 4.把第一步变量的csv文件在runn ...

  3. java代码---charAt()和toCharry()的用法

    总结:charAt()是返回字符型,把字符串拆分成某个字符,返回指定位置的字符.可以把字符串看成char型数组 package com.sads; ///输出一个大写英文字母的 public clas ...

  4. 阻塞队列之一:BlockingQueue汇总

    一.阻塞队列介绍 BlockingQueue 通常用于一个线程生产对象,而另外一个线程消费这些对象的场景.下图是对这个原理的阐述: 一个线程往里边放,另外一个线程从里边取的一个 BlockingQue ...

  5. Linux 之 利用Google Authenticator实现用户双因素认证

    一.介绍:什么是双因素认证 双因素身份认证就是通过你所知道再加上你所能拥有的这二个要素组合到一起才能发挥作用的身份认证系统.双因素认证是一种采用时间同步技术的系统,采用了基于时间.事件和密钥三变量而产 ...

  6. 解决 service iptables start 无法启动的问题

    解决方式: iptables -F  // 初始化iptables. service iptables save  // 保存 service iptables restart  // 重启

  7. Jenkins启动报端口被占用,解决办法FAILED ServerConnector@2a265ea9{HTTP/1.1}{0.0.0.0:8080}: java

    修改Jenkins端口java -jar jenkins.war --httpPort=8081

  8. How To Install MongoDB on CentOS 6

    How To Install MongoDB on CentOS 6 Posted on January 21, 2014 by J. Mays | Updated: January 22, 2014 ...

  9. leetcode697

    public class Solution { public int FindShortestSubArray(int[] nums) { //先找到最大频度的数字都有哪些,加入到一个集合中 var ...

  10. nginx root与alias区别

    引用于文章https://blog.csdn.net/line_aijava/article/details/71473793 root: Sets the root directory for re ...