C++ 类的继承一(访问控制)
//类的继承
#include<iostream>
using namespace std; /*
面向对象中的继承类之间的父子关系
1.子类拥有父类所有的成员属性和成员函数(包括私有成员变量)
2.子类就是一种特殊的父类
3.子类对象可以当作父类对象使用
4.子类可以拥有父类没有的方法和属性 c++中的类成员访问级别(public,protected,private) 类成员访问级别设置原则
1.需要被外界访问的成员直接设置为public
2.只能在当前类中访问的成员设置为private
3.只能在当前类和子类中访问的成员设置为protected,protected的成员访问权限介于public和private之间 判断类成员变量访问权限三步骤
1.看调用语句写在子类的内部还是外部
2.看子类如何从父类继承(public,protected,private)
3.看父类中的访问级别(public,protected,private) */ class A{
public:
int a;
protected:
int b;
private:
int c;
}; class B:public A
{
public:
void Test1(){
a = ;//父类的公有成员可以在子类内部访问
b = ;//父类的保护成员可以在子类内部访问
//c = 20; 报错: 父类的私有成员在子类内部无法访问
}
};
class Bt :public B
{
public:
void Test12(){
a = ;//可以访问B类中的a属性--说明a属性的访问级别至少是public或者protected
b = ;//可以访问B类中的b属性--说明a属性的访问级别至少是public或者protected
//c = 20; 报错: 父类的私有成员在子类内部无法访问
}
}; void Protect1(){
B b1;
b1.a = ;//父类的公有成员可以在子类外部访问
//证明:public继承父类,父类的公有成员会变成子类的公有成员
//b1.b = 21; 报错 说明:public继承父类,父类的保护成员会变成子类的保护成员
} class C :protected A{
void Test1(){
a = ;//父类的公有成员可以在子类内部访问
b = ;//父类的保护成员可以在子类内部访问
//c = 20; 报错: 父类的私有成员在子类内部无法访问
}
}; class Ct :public C{
void Test12(){
a = ;//可以访问C类中的a属性--说明a属性的访问级别至少是public或者protected
b = ;//可以访问C类中的b属性--说明a属性的访问级别至少是public或者protected
//c = 20; 报错: 父类的私有成员在子类内部无法访问
}
}; void Protect2(){
C c1;
//c1.a = 10; 报错 :error C2247 : “A::a”不可访问,因为“C”使用“protected”从“A”继承
//说明 protected继承父类,父类的公有成员会变为子类的保护成员
//c1.b = 21; 报错 error C2248 : “A::b” : 无法访问 protected 成员(在“A”类中声明)
//说明 protected继承父类,父类的保护成员会变为子类的保护成员
} class D :private A{
void Test1(){
a = ;//父类的公有成员可以在子类内部访问
b = ;//父类的保护成员可以在子类内部访问
//c = 20; 报错: 父类的私有成员在子类内部无法访问
}
}; class Dt :public D{
void Test12(){
//a = 10; 报错 error C2247 : “A::a”不可访问,因为“D”使用“private”从“A”继承
//D中的成员变量无法被其子类访问,说明a成员属性是D的私有成员属性
//b = 20; 报错 error C2248 : “A::b” : 无法访问 无法访问的 成员(在“A”类中声明)
//D中的成员变量无法被其子类访问,说明b成员属性是b的私有成员属性
//说明:private继承父类,父类中的公有成员变量会变成子类的私有成员变量,父类的保护成员变量会变成子类的私有成员变量
}
}; void main(){
system("pause");
} /*
c++的继承方式(public,private,protected)会影响子类对外的访问属性
public继承:父类成员在子类中保持原有的访问级别
--即父类的公有成员变成子类的公有成员,父类的保护成员成为子类的保护成员,父类的私有成员被子类继承,但不是子类的私有成员
private继承:父类成员在子类中变为private成员
--即父类的公有成员变成子类的私有成员,父类的保护成员成为子类的私有成员,父类的私有成员被子类继承,但不是子类的私有成员
protected继承:父类中public成员变成protected
--即父类的公有成员变成子类的保护成员,父类的保护成员成为子类的保护成员,父类的私有成员被子类继承,但不是子类的私有成员 总结:不同的继承方式可能改变继承成员的访问属性
*/
C++ 类的继承一(访问控制)的更多相关文章
- Java——类的继承、访问控制
[继承] <1>Java只支持单继承,不支持多继承. <2>继承父类的私有成员变量,只有所有权,没有使用权. [继承中的构造方法]
- PHP类(四)-类的继承
类的继承就是从已经定义的类中继承数据,也可以重新定义或者加入一些数据. 被继承的类称为父类,基类,超类 继承的类称为子类,派生类 在PHP中只能使用单继承,也就是一个类只能从一个类中继承数据,但是一个 ...
- 《挑战30天C++入门极限》C++类的继承与多重继承的访问控制
C++类的继承与多重继承的访问控制 在前面的练习中我们一直在使用public的继承方式,即共有继承方式,对于protected和private继承方式,即保护继承与私有继承方式我们并没有讨论. ...
- ios学习笔记(二)之Objective-C类、继承、类别和协议
二:Objective-C类与继承和协议 在前面已经提过了对象的初始化,这里首先讲的是变量. 2.1 变量 局部变量(内部变量): 局部变量是在方法内作定义说明的,其作用域仅限于方法内,离开方法后使用 ...
- 【JAVA零基础入门系列】Day13 Java类的继承与多态
继承是类的一个很重要的特性,什么?你连继承都不知道?你是想气死爸爸好继承爸爸的遗产吗?(滑稽) 开个玩笑,这里的继承跟我们现实生活的中继承还是有很大区别的,一个类可以继承另一个类,继承的内容包括属性跟 ...
- Java 继承和访问控制
类的继承 Java中使用extends来实现继承 通过继承,子类自动拥有了基类(supercalss)的所有成员. Java只支持单继承,一个子类只允许有一个基类,一个基类可以有多个子类. class ...
- php类的继承(基本概念,访问权限修饰符,重写override)
类的继承 简单理解: 某个类A具有某些特征,另一个类B,也具有A类的所有特征,并且还可能具有自己的更多的一些特征,此时,我们就可以实现:B类使用A的特征信息并继续添加自己的一些特有特征信息. 基本概念 ...
- C++学习笔记:07 类的继承与派生
课程<C++语言程序设计进阶>清华大学 郑莉老师) 基本概念 继承与派生的区别: 继承:保持已有类的特性而构造新类的过程称为继承. 派生:在已有类的基础上新增自己的特性(函数方法.数据成员 ...
- UML类图(上):类、继承和实现
面向对象设计 对于一个程序员来说,在工作的开始阶段通常都是别人把东西设计好,你来做.伴随着个人的成长,这个过程将慢慢变成自己设计一部分功能来实现,自己实现.如果要自己设计,无论是给自己看,还是给别人看 ...
随机推荐
- Cocos2d-x -- 如何让背景从上到下滚动
1. 首先,声明一个2个大小的sprite数组 class GameScreen : public cocos2d::Layer { public: ... cocos2d::Sprite *back ...
- iOS7 下使用SVPullToRefresh 下拉刷新导航栏位置错误
iOS7 下使用SVPullToRefresh 下拉刷新导航栏位置错误: 下拉刷新之后,tableview的第一列会跑到导航栏的下面: 修正:添加如下代码 /** * 下拉刷新 增加一个: */ // ...
- UNIX网络编程调试工具:tcpdump、netstat和lsof
tcpdump程序 tcpdump一边从网络读入分组一边显示关于这些分组的大量信息.它还能够只显示与所指定的准则匹配的那些分组. netstat程序 netstat服务于多个目的: (1)展示网络端点 ...
- it-tidalwave-semantic-aux-1.0.13.jar下载
今天来给大家分一下一下自己认为还是挺不错的jar包下载网址,it-tidalwave-semantic-aux-1.0.13.jar,作为java开发人员可能时时刻刻都在跟jar包打交道,即使这会用不 ...
- taro 环境判断
Taro.ENV_TYPE ENV_TYPE.WEAPP 微信小程序环境 ENV_TYPE.SWAN 百度小程序环境 ENV_TYPE.ALIPAY 支付宝小程序环境 ENV_TYPE.TT 字节跳动 ...
- Asp.net MVC中Html.Partial, RenderPartial, Action,RenderAction 区别和用法【转发】
Html.partial和RenderPartial的用法与区别Html.partial和RenderPartial都是输出html片段,区别在于Partial是将视图内容直接生成一个字符串并返回(相 ...
- 一个字符串是否在另外一个字符串数组里 Array.Exists 的用法 Array.IndexOf 用法
转: using System; class Program { static void Main() { string[] array = { "cat", "dot& ...
- OpenCV求取轮廓线
// Threshold.cpp : Defines the entry point for the console application. // #include "stdafx.h&q ...
- Linode之使用UE实现SSH连接
在Linode上建立了节点后,选择对应的操作系统(我选用的是Ubuntu 12.04 LTS),然后启动就可以.详细能够參见该文(https://library.linode.com/getting- ...
- hdu 4494 Teamwork (可行流的最小流)
去年通话邀请赛的B题,当时居然过的那么少...明明是一道非常裸的可行流最小流麽..仅仅要对每种人分别求一下可行最小流加起来就能够了.建图是对每一个点拆点,容量上下届都设为v[i],然后每一个点间能连边 ...