第44课 继承中的访问级别

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了第44课 继承中的访问级别相关的知识,希望对你有一定的参考价值。

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课 继承中的访问级别的主要内容,如果未能解决你的问题,请参考以下文章

第45课 继承中的访问级别

C++ 类的继承一(访问控制)

继承中的访问级别(三十七)

C++--第15课 - 惊艳的继承

第54课 被遗弃的多重继承(下)

第53课 被遗弃的多重继承