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

第44课 继承中的访问级别

时间:2016-06-03 22:41:56      阅读:231      评论:0      收藏:0      [点我收藏+]

标签:

1. 值得思考的问题

(1)根据面向对象的理论:子类拥有父类的一切属性和行为,子类能够直接访问父类的私有成员!

(2)但C++语法规定,外界不能直接访问类的private成员,所以子类也不能直接访问父类的私有成员

2. 继承中的访问级别

(1)面向对象中的访问级别不只是public和private

(2)可以定义protected访问级别

(3)关键字protected的意义

  ①修饰的成员不能被外界直接访问

  ②修饰的成员可以被子类直接访问

【编程实验】组合和继承的综合实例

技术分享 

#include <iostream>
#include <string>
#include <sstream>

using namespace std;

class Object
{
protected:        //以下两个成员变量须被子类直接访问
    string mName;
    string mInfo;
public:
    Object()
    {
        mName = "Object";
        mInfo = "";
    }
    
    string name(){return mName;}
    string info(){return mInfo;}
};

class Point : public Object
{
private:    //没有子类,无须被访问
    int mX;
    int mY; 
public:
    Point(int x = 0, int y = 0)
    {
        ostringstream s;
        
        mX = x;
        mY = y;
        mName = "Point";
        
        s << "P(" << mX << ", " << mY << ")";
        
        mInfo = s.str();
    }
    
    int x() {return mX;}
    int y() {return mY;}        
};

class Line : public Object
{
private: 
    Point mP1;
    Point mP2; 
public:
    Line(Point p1, Point p2)
    {
        ostringstream s;
        
        mP1= p1;
        mP2 = p2;
        mName = "Line";
        
        s << "Line from " << mP1.info() << " to " << mP2.info();
        
        mInfo = s.str();
    } 

    Point begin()
    {
        return mP1;
    }
    Point end()
    {
        return mP2;
    }    
};

int main()
{
    Object o;
    Point pb(1, 2);
    Point pe(5, 6);
    Line l(pb, pe);
    
    cout << o.name() << endl;
    cout << o.info() << endl;
    
    cout << endl;
    
    cout << pb.name() << endl;
    cout << pb.info() << endl;
    
    cout << endl;
    
    cout << l.name() << endl;
    cout << l.info() << endl;
      
    return 0;
}

3. 小结

(1)面向对象中的访问级别不只有public和private

(2)protected修饰的成员不能被外界所访问

(3)protected使得子类能够访问父类的成员

(4)protected关键字是为了继承而专门设计的

(5)没有protected就无法完成真正意义上的代码复用

第44课 继承中的访问级别

标签:

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

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