【001 类和数据的抽象】C++中类成员的访问权限?

一、C++类的三种访问权限

1、公共权限 public
成员:类内可以访问,类外可以访问
任何一种继承,子类可以访问父类的公共成员


2、保护权限 protected
成员:类内可以访问,类外不可以访问
任何一种继承,子类可以访问父类的保护成员


3、私有权限 private
成员:类内可以访问,类外不可以访问。
任何一种继承,子类不可以访问父类的私有成员
 


二、C++类的三种继承方式

继承语法:class 子类 : 继承方式 父类

注意:私有继承将父类的public、protected变成private类型,而不是无法访问!

虚继承的作用:

虚继承是解决C++多重继承问题的一种手段,从不同途径继承来的同一基类,会在子类中存在多份拷贝。这将存在两个问题:其一,浪费存储空间;第二,存在二义性问题。


三、什么是类内访问?什么是类外访问?

举个例子,假设有如下代码:

class CA
{
public:
    int a;
public:
    CA(){a = 7;}
};

int main()
{
    CA ca;
    int b = ca.a;
    return 0;
}

当你在main()函数中执行int b = ca.a;这句代码时,是main()函数在访问对象ca的成员变量a,而不是ca自己在访问它自己的成员变量,这就是外部访问。

那么,什么是内部访问呢?比如CA的构造函数CA()本身是对象ca的成员函数,在这个构造函数的内部也在访问a,这就是ca自己在访问自己的成员变量,这就是内部访问。

简单点说就是:

如果是在对象ca的外部,以ca.a的形式来访问ca的成员变量a,这就是外部访问;如果是ca自己的成员函数(包括但不限于它的构造函数)在访问ca自己的成员变量,这就是自己访问自己,是内部访问。

C++ 对象访问类成员算是类外访问还是类内访问?_百度知道


四、参考内容

【C++ 深入浅出】类的3种访问权限和3种继承方式详解_白马金羁侠少年的博客-CSDN博客_保护权限和私有权限区别

  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
第三章 Java面向对象程序设计 Java面向对象程序设计("方法"相关文档)共57张全文共57页,当前为第1页。 3.1 面向对象程序设计的基本概念 对象是客观世界中的某个具体事物。(客车) 事物的特性就是数据(载客数量、燃料容量、耗油均值) 事物的行为就是方法 (行驶、起动、刹车) 数据 方法 面向对象的程序设计方法就是将客观事物抽象成为"",并通过的"继承"实现软件的可扩充性和可重用性。 对象 Java面向对象程序设计("方法"相关文档)共57张全文共57页,当前为第2页。 和对象 是具有共同特性和行为的事物的抽象,是一种特殊数据型。在中包含了数据和与数据有关的操作(方法)。 对象是的实例。 汽车 对象 客车 抽象 实例化 Java面向对象程序设计("方法"相关文档)共57张全文共57页,当前为第3页。 面向对象程序设计的核心技术 封装、继承、多态性 通过封装可以隐藏的实现细节,也可以避免对数据的直接操作。是封装的基本单元。 继承是对的功能的重用和扩充。 多态性是指方法的名字相同,但实现不同。 Java是一种完全面向对象的程序设计语言。它继承了C++的优点。Java降低了程序的复杂性,实现了代码的可重用性,提高了运行效率。 Java面向对象程序设计("方法"相关文档)共57张全文共57页,当前为第4页。 3.2 的创建 的声明格式: <首声明> {<主体>} 首声明定义的名字、访问权限以及与其它的关系等。 主体定义成员,包括变量(数据)和方法(行为) Java面向对象程序设计("方法"相关文档)共57张全文共57页,当前为第5页。 首声明: [<修饰符>] class <名> [extends <超名>] [implements <接口名>] class: 定义的关键字; extends: 表示和另外一些(超)的继承关系; implements: 表示实现了某些接口; 修饰符: 表示访问权限(public、private等)和一些其它特性(abstract、final等); 例如: public class Date1 声明Date1访问权限为public,表示Date1可以被该所属的包之外的使用。 Java面向对象程序设计("方法"相关文档)共57张全文共57页,当前为第6页。 主体的结构: <首声明> {    //首,以下为主体 <成员变量的声明> <成员方法的声明及实现> } 成员变量即数据,反映了的属性和状态。 成员方法即的行为(对数据的操作) 例4.2.1:声明一个日期Date1 public class Date1 { int year,month,day; //成员变量 public void today( ) { //成员方法 System.out.println("Date is"+year+"/"+month+"/"+day); } } Java面向对象程序设计("方法"相关文档)共57张全文共57页,当前为第7页。 Java面向对象程序设计("方法"相关文档)共57张全文共57页,当前为第8页。 成员变量的声明格式: [<修饰符>] [static] [final] [transient] <变量型> <变量名> static: 表示是一个成员变量(静态变量); final: 表示是一个常量; (最终成员变量) 例:final double PI=3.1415926; transient: 表示一个临时变量 修饰符: 表示变量的访问权限(缺省访问、public、 protected和private) 作用域:整个。同一中的所有方法都可以对其访问。并可简单地通过名字来引用。(在方法体内定义的变量是方法变量,作用域只能在方法体内) 例:class Sampleclass{ public int I; method(){ int j; } } Java面向对象程序设计("方法"相关文档)共57张全文共57页,当前为第9页。 成员方法的声明格式: [<修饰符>]<返回型> <方法名> ([<参数表列>]) [throws <异常>] { 方法体 } 修饰符: 方法的访问权限(缺省的、public、protected和private) static: 方法(静态方法); abstract: 抽象方法(无方法体的方法); final: 最终方法(不能被子改变)。 throws: 表示抛出异常 Java面向对象程序设计("方法"相关文档)共57张全文共57页,当前为第10页。 public class Date2 { int year,month,day; //设置某一天日期的方法 public voi

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Kashine

你的鼓励将是我创作的动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值