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类图(上):类、继承和实现
面向对象设计 对于一个程序员来说,在工作的开始阶段通常都是别人把东西设计好,你来做.伴随着个人的成长,这个过程将慢慢变成自己设计一部分功能来实现,自己实现.如果要自己设计,无论是给自己看,还是给别人看 ...
随机推荐
- PHP 5 时区
PHP 5 时区 PHP 支持的时区 下面是 PHP 支持的时区的完整列表,这些对一些 PHP 日期函数很有用. 非洲 美洲 南极洲 北冰洋 亚洲 大西洋 大洋洲 欧洲 印度洋 太平洋 非洲 Afri ...
- hyper-v虚拟网络配置
今天重新整整几个月前装的hyper-v,系统早已经装好但是网络不通. hyper-v虚拟网络分为3种:外部网络,内部网络和专用网络. 外部网络:虚拟机可以连接主机和外部网络. 内部网络:虚拟机可以连接 ...
- 设计模式 - 模板方法模式(template method pattern) 具体解释
模板方法模式(template method pattern) 详细解释 本文地址: http://blog.csdn.net/caroline_wendy 模板方法模式(template metho ...
- bzoj-1492 货币兑换Cash (2)——CDQ分治
题意: 略 见上一篇 题解: 方程还是那个方程f[i]=A[i] * X[j] + B[i] * Y[j]. 化简为Y[i]=(-A[i]/B[i]) * X[i] + f[i]/B[i]这一坨: 既 ...
- Eclipse/Myeclipse中查看和调试JDK源代码的方法
看过这篇文章后,实践写的 http://blog.csdn.net/qq_27857857/article/details/71250401 一共做了以下几部: 第一步: 第二步: 一直next,到第 ...
- javascript 新知识
document.compatMode 属性 BackCompat: Standards-compliant mode is not switched on. (Quirks Mode) 标准模式 ...
- 【JS】jQuery中将数组转换成字符串join()和push()使用
1.push()将元素依次添加至数组:2.join()将数组转换成字符串,里面可以带参数分隔符,默认[,] <script type = text/javascript> $(docume ...
- public static void main(String args[])什么意思?
public static void main(String[] args) 这绝对不是凭空想出来的,也不是没有道理的死规定,而是java程序执行的需要. jvm在试图运行一个类之前,先检查该类是否包 ...
- 摘:C++日期时间与字符串间的转换
VC6中 CString sTime = _T("2007-10-26 13:20:30"); char *charTime = (LPSTR)(LPCTSTR)sTime; CS ...
- hibernate开发流程
开发流程,注意:每个hibernate版本在集成的时候是不太一样的.本次使用的是hibernate-distribution-3.6.10.Final-dist 一.开发流程 1)在数据库中创建表,代 ...