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