C++中继承的protected访问级别
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访问级别的更多相关文章
- 解析Visual C# 7.2中的private protected访问修饰符
去年12月份,随着Visual Studio 2017 Update 15.5的发布,Visual C#迎来了它的最新版本:7.2. 在这个版本中,有个让人难以理解的新特性,就是private pro ...
- C++中public、protected及private用法
转自:http://www.jb51.net/article/54224.htm 初学C++的朋友经常在类中看到public,protected,private以及它们在继承中表示的一些访问范围,很容 ...
- Java中public,private,protected,和默认的区别
Java中public,private,protected,和默认的区别 1.private修饰词,表示成员是私有的,只有自身可以访问: 2.protected,表示受保护权限,体现在继承,即子类可以 ...
- C++中public、protected、private
C++中public.protected.private 第一:private, public, protected 访问标号的访问范围. private:只能由 1.该类中的函数. 2.其友元函数 ...
- C++中继承与抽象类
继承语法格式如下: class 子类名称 : 继承方式(public private protected 三种) 父类名称 纯虚函数格式: virtual 返回值类型 函数名(参数列表)= 0:含有纯 ...
- 深入理解C++中public、protected及private用法
深入理解C++中public.protected及private用法 这篇文章主要介绍了C++中public.protected及private用法,对于C++面向对象程序设计来说是非常重要的概念 ...
- 【转】深入理解C++中public、protected及private用法
首先明白以下两点: 1.类的一个特征就是封装,public和private作用就是实现这一目的. 即:用户代码(类外)可以访问public成员而不能访问private成员:private成员只能由类成 ...
- C++中public、protected、private的差别
第一: private,public,protected的訪问范围: private: 仅仅能由该类中的函数.其友元函数訪问,不能被不论什么其它訪问.该类的对象也不能訪问. protected: ...
- C++中public、protected及private使用方法
1.类的一个特征就是封装,public和private作用就是实现这一目的.所以: 用户代码(类外)能够訪问public成员而不能訪问private成员:private成员仅仅能由类成员(类内)和友元 ...
随机推荐
- Helm教程
1.概述 Helm是k8s的包管理工具,类似Linux系统常用的 apt.yum等包管理工具. 使用helm可以简化k8s应用部署 2.基本概念 Chart:一个 Helm 包,其中包含了运行一个应用 ...
- 【主机管理项目】-(models.py(一对多、多对多数据库创建代码))
# -*- coding: utf-8 -*- from __future__ import unicode_literals from django.db import models class U ...
- HTML基础 结构,标题<h1>和段落<p> 写一个三毛语录
先看代码: <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <tit ...
- nuxtJs - axios 的 IE 兼容性的问题
因为考虑SEO, 所以采用nuxt.js进行服务端渲染, 用熟了vue, nuxt无缝对接简直不要太爽 烦人的需求又来了, 要兼容IE ~~ 兼容处理 无非就是babel 将高级语法转成弱智IE看得懂 ...
- NCRE训练二
package com.fei.ncre; import java.io.RandomAccessFile; /** * 该程序的功能是将本程序代码打印输出 */ public class Java_ ...
- Java数据类型转换题目
题目一 public static void main(String[] args) { byte b1 = 1, b2 = 2, b3, b6, b8; final byte b4 = 4, b5 ...
- Mac OS 10.15系统入门教程 系统语言输入法详解
对于一些Mac新手来说呢还不知道偏好设置到底是什么?有什么用处?其实Mac系统内的几乎所有的系统相关的设置都会在系统偏好设置内出现. 切换系统语⾔在语言与地区设置中拖拽左侧的语言条目就可以切换系统的语 ...
- poj 2186: Popular Cows(tarjan基础题)
题目链接 tarjan参考博客 题意:求在图上可以被所有点到达的点的数量. 首先通过tarjan缩点,将所有内部两两可达的子图缩为一点,新图即为一个有向无环图(即DAG). 在这个DAG上,若存在不止 ...
- vue 全局 js 方法
1.新增 getCurrentDataType.js 文件 import cookieUtils from '@/config/cookieUtils' function getCurrentData ...
- Vue学习笔记-父子通信案例
<div id="app"> <cpn :number1="num1" :number2="num2" @num1chan ...