码迷,mamicode.com
首页 > 其他好文 > 详细

第45课 继承中的访问级别

时间:2016-06-09 13:29:30      阅读:254      评论:0      收藏:0      [点我收藏+]

标签:

1. C++中3种不同的继承方式

(1)public继承:父类成员在子类中保持原有访问级别

(2)private继承:父类成员在子类中变为私有成员

(3)protected继承:父类中的公有成员变为保护成员,其它成员保持不变。

 技术分享

  ①继承成员的访问属性 = Max{继承方式, 父类成员访问属性},Max表示最严格

  ②C++中的默认继承方式为private

【编程实验】继承的访问级别深度实践

#include <iostream>
using namespace std;

class Parent
{
protected:    //在子类中可以直接访问
    int m_a;
protected:
    int m_b;
public:
    int m_c;
    
    void set(int a, int b, int c)
    {
        m_a = a;
        m_b = b;
        m_c = c;
    }
};

//冒号:表示继承关系,public表示继承方式,Parent为父类
class Child_A : public Parent  //public继承
{
public:
    void print()
    {
        cout << "m_a = " << m_a << endl;
        cout << "m_b = " << m_b << endl;
        cout << "m_c = " << m_c << endl;
    }    
};

class Child_B : protected Parent //protected继承
{
public:
    void print()
    {
        cout << "m_a = " << m_a << endl;
        cout << "m_b = " << m_b << endl;
        cout << "m_c = " << m_c << endl;
    }    
};

class Child_C : private Parent //protected继承
{
public:
    void print()
    {
        cout << "m_a = " << m_a << endl;
        cout << "m_b = " << m_b << endl;
        cout << "m_c = " << m_c << endl;
    }    
};

int main()
{
    Child_A a;
    Child_B b;
    Child_C c;
    
    a.m_c = 100; //合法
    //b.m_c = 100; //Child_B,protected继承自parent,所以来自父类的公有成员m_c
                 //变成了protected属性,外界无法访问
    //c.m_c = 100; //Child_C,private继承自parent,所以来自父类的成员m_c
                 //变成了private属性,外界无法访问

    a.set(1, 1, 1); //合法
    //b.set(2, 2, 2); //继承方式为protected,来自父类的函数set无法被外界访问
    //c.set(3, 3, 3); //继承方式为private,来自父类的函数set无法被外界访问 
    
    a.print();
    b.print();
    c.print();
    
    return 0;
}

2. 遗憾的事实

(1)一般而言,C++工程项目中只使用public继承

(2)C++的派生语言(如D、C#、Java)只支持一种继承方式(public继承)

(3)protected和private继承带来的复杂性远大于实用性

3. 小结

(1)C++中支持3种不同的继承方式

(2)继承方式直接影响父类成员在子类中的访问属性

(3)一般而言,工程中只使用public的继承方式

(4)C++的派生语言中只支持public继承方式

第45课 继承中的访问级别

标签:

原文地址:http://www.cnblogs.com/5iedu/p/5572208.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!