1,子类是否可以直接访问父类的私有成员?

2,根据面向对象理论:

根据 C++ 语法:

3,继承中的访问级别编程实验:

 #include <iostream>
#include <string> using namespace std; class Parent
{
private:
int mv; public:
Parent()
{
mv = ;
} int value()
{
return mv;
}
}; class Child : public Parent // Child 虽然是 Parent 的子类,但是严格意义上来说,它绝对是 Parent 的外部,因此 Parent 不可以访问 Parent 类的私有成员;
{
public:
int addValue(int v)
{
mv = mv + v; // 这里访问了两次 mv,编译器则显示了两次编译错误,在同一个地方;如何访问父类的非公有成员?
}
}; int main()
{
return ;
}

4,继承中的访问级别:

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

2,可以定义 protected 访问级别;

3,关键字 protected 的意义;

1,修饰的成员不能被外界直接访问;

2,修饰的成员可以被子类直接访问;

5,protected 初体验编程实验:

 #include <iostream>
#include <string> using namespace std; class Parent
{
protected:
int mv;
public:
Parent()
{
mv = ;
} int value()
{
return mv;
}
}; class Child : public Parent
{
public:
int addValue(int v)
{
mv = mv + v;
}
}; int main()
{
Parent p; cout << "p.mv = " << p.value() << endl; // 100; // p.mv = 1000; // error,除子类之外的外界不能访问; Child c; cout << "c.mv = " << c.value() << endl; // 100; c.addValue(); cout << "c.mv = " << c.value() << endl; // 150; // c.mv = 10000; // error,除子类之外的外界不能访问; return ;
}

6,为什么面向对象中需要 protected ?

1,所有的开发者应该都有一个架构师德梦想,架构师需要具备的一个素质就是设计能力,我们在做开发的时候,也许系统需要这个功能、也许不需要,究竟需不需要呢?一个系统中并不是功能越多越好,因此我们必须要有设计能,学习过程中要多思考;

2,从生活中入手来思考,女孩子整容否、男孩子尿床、同性恋否,这些信息就是 private 的,生活中的工资是隐私,但是家人可以知道,这是就是 protected;

3,protected 的引入是必须的、绝对的,没有它的引入,面向对象就是不完善的;

4,其他的面向对象语言中如 Java、C# 等,它们当中的访问权限不止三种;

7,定义类时访问级别的选择:

1,左右分支的不同之处在于,是否会被继承,这也是 protected 选择与否的根本依旧;

8,组合与继承的综合实例:

1,这张图中 Object 这个类就是用来被继承的;

2,Line 这个类组合了 Point 这个类;

3,综合实例编程实验:

 #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 = , int y = )
{
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) // 这里编译错误,因为要调用默认构造函数,但是 Point 已经定义了构造函数,此刻可以采用赋默认值的方式;
{
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 p(, );
Point pn(, );
Line l(p, pn); cout << o.name() << endl; // 单元测试;Object
cout << o.info() << endl; // 单元测试;“ ” cout << endl; cout << p.name() << endl; // 单元测试;Point
cout << p.info() << endl; // 单元测试;p(1, 2) cout << endl; cout << l.name() << endl; // Line
cout << l.info() << endl; // Line from p(1, 2) to p(5, 6) return ;
}

9,小结:

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

2,protected 修饰的成员不能被外界所访问;

3,protected 使得子类能够访问父类的成员;

1,子类继承父类后,子类和父类中相同的代码各有一套,分别存储使用的。

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

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

1,因为 private 不能继承,而 public 不用继承,但是有些信息又是介乎两者之间的;

C++中继承的protected访问级别的更多相关文章

  1. 解析Visual C# 7.2中的private protected访问修饰符

    去年12月份,随着Visual Studio 2017 Update 15.5的发布,Visual C#迎来了它的最新版本:7.2. 在这个版本中,有个让人难以理解的新特性,就是private pro ...

  2. C++中public、protected及private用法

    转自:http://www.jb51.net/article/54224.htm 初学C++的朋友经常在类中看到public,protected,private以及它们在继承中表示的一些访问范围,很容 ...

  3. Java中public,private,protected,和默认的区别

    Java中public,private,protected,和默认的区别 1.private修饰词,表示成员是私有的,只有自身可以访问: 2.protected,表示受保护权限,体现在继承,即子类可以 ...

  4. C++中public、protected、private

    C++中public.protected.private 第一:private, public, protected 访问标号的访问范围. private:只能由  1.该类中的函数. 2.其友元函数 ...

  5. C++中继承与抽象类

    继承语法格式如下: class 子类名称 : 继承方式(public private protected 三种) 父类名称 纯虚函数格式: virtual 返回值类型 函数名(参数列表)= 0:含有纯 ...

  6. 深入理解C++中public、protected及private用法

    深入理解C++中public.protected及private用法   这篇文章主要介绍了C++中public.protected及private用法,对于C++面向对象程序设计来说是非常重要的概念 ...

  7. 【转】深入理解C++中public、protected及private用法

    首先明白以下两点: 1.类的一个特征就是封装,public和private作用就是实现这一目的. 即:用户代码(类外)可以访问public成员而不能访问private成员:private成员只能由类成 ...

  8. C++中public、protected、private的差别

    第一: private,public,protected的訪问范围:   private: 仅仅能由该类中的函数.其友元函数訪问,不能被不论什么其它訪问.该类的对象也不能訪问. protected: ...

  9. C++中public、protected及private使用方法

    1.类的一个特征就是封装,public和private作用就是实现这一目的.所以: 用户代码(类外)能够訪问public成员而不能訪问private成员:private成员仅仅能由类成员(类内)和友元 ...

随机推荐

  1. AJAX 获取Servlet文件路径

    下面均不行: xmlRes.open("get","edu/hust/ajax/TestServlet",true); xmlRes.open("ge ...

  2. worldcloud库的使用

    worldcloud库的使用 worldcloud是一个优秀的第三方词云展示库,用来实现比较有逼格的数据可视化效果.更加直观与艺术的展示单词. worldcloud对象的创建 worldcloud.W ...

  3. 四 shell基本命令

    一   内置命令 hlep 命令  帮助 help test help -s printf   显示内置命令的语法格式 echo 用来显示一行文字 echo "hello world&quo ...

  4. 解决IDEA项目名称无下标蓝色小方块

    点击下图中 + 号,引入该工程的pom.xml即可 .

  5. head、tail 命令和实时(real-time)更新

    head.tail 命令和实时(real-time)更新 head filename: 输出 filename 文件的前10项 tail filename: 输出 filename 文件的后10项 即 ...

  6. 内存中的Buffer和Cache的区别

    Reference:https://time.geekbang.org/column/article/74633 磁盘是一个块设备,可以划分为不同的分区:在分区之上再创建文件系统,挂载到某个目录,之后 ...

  7. 4412 make menuconfig和make

    一.Menuconfig的操作 • Linux编译器通过.config文件确认哪些代码编译进内核,哪些被裁减掉• menuconfig是生成.config的一个工具• 在Linux发展过程中,配置内核 ...

  8. flutter页面布局二

    Stack 在flutter中,Stack表示堆的意思,可以用来实现页面的定位布局. Stack组件接收两个可选参数: alignment:配置所有子元素的显示位置 children:子组件    在 ...

  9. JQUERY的$(function(){})和window.onload=function(){}的区别【转】

    在Jquery里面,我们知道入口函数有两种写法:$(function(){}) 和$(document).ready(function(){}) 作用类似于传统JavaScript中的window.o ...

  10. RHEL 使用epel源

    转自http://www.linuxidc.com/Linux/2012-10/71850.htm 设置epel源.方法如下: 32位系统选择:rpm -ivh http://download.Fed ...