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. NGUI多行输入框和滚动条结合使用(text list script 和scroll bar script)

    一,我们添加一个label,如下图:将label属性设置 二,给label添加一个box collider.然后在add component 添加test list,如下图: 三,添加一个脚本Test ...

  2. c#catch循环内捕获到异常继续循环

    一,如果我们将异常而不影响循环,如下代码: using System; using System.Collections.Generic; using System.Linq; using Syste ...

  3. struts2的action方法匹配以及通配符的使用

    1. ActionMethod:Action执行的时候并不一定要执行execute方法,可以在配置文件中配置action的时候用"method"属性来指定执行哪个方法,也可以在ur ...

  4. scp - 安全复制(远程文件复制程序)

    总览 SYNOPSIS scp -words [-pqrvBC1246 ] [-F ssh_config ] [-S program ] [-P port ] [-c cipher ] [-i ide ...

  5. Shell03---流程控制

    目录 Shell03---流程控制 1. 流程控制语句if基本概述 2. 流程控制语句if文件比较 3. 流程控制语句if整数比较 4. 流程控制语句if字符比较 5. 流程控制语句if正则比较 6. ...

  6. 【抓包工具之Fiddler】中session的请求/响应类型与图标对照表

  7. ASIO

    { 编译ASIO库时,出现编译警告, "Please define _WIN32_WINNT or _WIN32_WINDOWS appropriately. For example:\n& ...

  8. Excel,此文件中的某些文本格式可能已经更改,因为它已经超出最多允许的字体数。

    既然是超出最多允许的字体数,那么就不要循环创建IFont.先创建一个IFont font=wk.CreateFont();后面都使用它即可.

  9. boost algorithm

    BOost Algorithm provides algorithms that complement the algorithms from the standard library. Unlike ...

  10. yii2.0增删改查实例讲解

    yii2.0增删改查实例讲解一.创建数据库文件. 创建表 CREATE TABLE `resource` ( `id` int(10) NOT NULL AUTO_INCREMENT, `textur ...