zoukankan      html  css  js  c++  java
  • 对private protected public的详解:

      1 #include <iostream>
      2 #include <stack>
      3 #include <queue>
      4 #include <exception>
      5 #include <sstream>
      6 #include <string>
      7 #include <vector>
      8 #include<list>
      9 #include<cassert>
     10 #include<cstdlib>
     11 using namespace std;
     12 
     13 
     14 class A{
     15 private:
     16     int AprivateVar;
     17     void Apirvate()
     18     {
     19         cout<<"A:Aprivate()"<<endl;
     20     }
     21 protected:
     22     int AprotectedVar;
     23     void Aprotected()
     24     {
     25         cout<<"A:Aprotected()"<<endl;
     26     }
     27 public:
     28     int ApublicVar;
     29     void Apublic()
     30     {
     31         cout<<"A:Apublic()"<<endl;
     32     }
     33 
     34     void Test()
     35     {
     36         AprivateVar=1;
     37         Apirvate();
     38         AprotectedVar=1;
     39         Aprotected();
     40         ApublicVar=1;
     41         Apublic();
     42     }
     43 };
     44 
     45 class Bprivate:private A
     46 {
     47 public:
     48     void test()
     49     {
     50         //访问基类private成员
     51         //    AprivateVar=1;//这里因为子类声明的是private故不可访问
     52         //    Apirvate();//这里因为子类声明的是private故不可访问
     53 
     54         AprotectedVar=1;
     55         Aprotected();
     56 
     57         ApublicVar=1;
     58         Apublic();
     59     }
     60 };
     61 
     62 class Cprivate:public Bprivate
     63 {
     64 public:
     65     void test()
     66     {
     67         //此处全都不能访问
     68         //在子类中:基类的public成员和protected成员是可见的.基类的public成员和protected成员都变成子类的private成员,并且不能这个子类的派生类所访问.
     69         /*AprivateVar=1;/
     70         Apirvate();/
     71 
     72         AprotectedVar=1;
     73         Aprotected();
     74 
     75         ApublicVar=1;
     76         Apublic();*/
     77     }
     78 };
     79 
     80 class Bprotected:protected A
     81 {
     82 public:
     83     void test()
     84     {
     85         //访问基类private成员
     86         //AprivateVar=1;//这里因为子类声明的是private故不可访问
     87         //Apirvate();//这里因为子类声明的是private故不可访问
     88 
     89         AprotectedVar=1;
     90         Aprotected();
     91 
     92         ApublicVar=1;
     93         Apublic();
     94     }
     95 };
     96 
     97 
     98 class Bpublic:public A
     99 {
    100 public:
    101     void test()
    102     {
    103         //AprivateVar=1;//子类不能访问基类中的private成员
    104         //Apirvate();//子类不能访问基类中的private成员
    105 
    106         AprotectedVar=1;//子类可以访问基类中的protected成员
    107         Aprotected();//子类可以访问基类中的protected成员
    108 
    109         ApublicVar=1;//子类可以访问基类中的public成员
    110         Apublic();//子类可以访问基类中的public成员
    111     }
    112 };
    113 
    114 int main(int argc,char* argv[])
    115 {
    116     A testA;
    117     //    testA.Apirvate();//实例的私有方法不能访问
    118     //    testA.Aprotected();//实例的受保护方法不能访问
    119     testA.Apublic();
    120 
    121     Bprivate testB;
    122     //testB.Apirvate();//实例的私有方法不能访问
    123     //    testB.Aprotected();//实例的受保护方法不能访问
    124     //testB.Apublic();//因为是private继承的.所以.实例对象不能访问私有方法
    125 
    126     Bprotected testB2;
    127     //testB2.Apirvate();//实例的私有方法不能访问
    128     //testB2.Aprotected();//实例的受保护方法不能访问
    129     //testB2.Apublic();//实例的受保护方法不能访问
    130 
    131     Bpublic testB3;
    132     //testB3.Apirvate();//子类的实例对象.只能访问基类的public成员.
    133     //testB3.Aprotected();//子类的实例对象.只能访问基类的public成员.
    134     testB3.Apublic();//子类的实例对象.只能访问基类的public成员.
    135     return 0;
    136 }
    137 
    138 /*
    139 总结一下:
    140         基类的实例对象,在这里和普通类是一样的,只能访问类的public成员方法和public成员变量;也就是public成员可见,protected和private是不可见的;
    141     1.Public继承:基类的public成员和protected成员对子类是可见的.继承以后public和protected都保持原有的状态.private是不可见的.也就是说子类
    142         中不能访问基类中的private成员,
    143         子类的实例对象.只能访问基类的public成员.以及自身的public成员.
    144         所以:在public继承时,子类的实例对象可以访问基类中的public成员.而子类中的成员方法可以访问基类中的public和protected成员.
    145     2.Private继承:基类的实例对象,可以访问基类的public成员(和普通类一样).
    146        在子类中:基类的public成员和protected成员是可见的.基类的public成员和protected成员都变成子类的private成员,这些public和protected成员不能被这个子类的派生类所访问.
    147        基类的私有成员是不可见的,也就是说子类不能访问基类中的私有成员.
    148        子类的实例对象,不能访问基类的所有成员.私有继承时,基类的成员只能由直接派生类访问,而无法再往下继承.
    149     3.protected继承:子类中可以访问基类的public成员和protected成员,基类的public和protected成员都变成protected成员,并且不能被这个派生类的子类所访问,基类的私有成员
    150        是不可见的,派生类不能访问基类中的私有成员.在protected继承时,基类的成员也只能由直接派生类访问,不能在往下继承.
    151 
    152 */
  • 相关阅读:
    自动化运维工具Ansible实战Playbooks剧本使用
    Mysql5.6.x版本半同步主从复制的开启方法
    mysql数据库的一些基本概念
    mysql之视图
    mysql之索引
    机器学习笔记09-----决策树与随机森林1---决策树概述
    机器学习笔记08-----回归2
    Anaconda 利用conda安装第3方包
    机器学习笔记07-----回归1
    使用navicat导出数据库字典
  • 原文地址:https://www.cnblogs.com/crazycodehzp/p/3902377.html
Copyright © 2011-2022 走看看