访问控制

如下代码,Student这个类的所有成员我们都可以调用,但是我们不想让被人调用Print1这个方法该怎么?

struct Student {
int age;
int sex; void Print1() {
printf("Func Print1");
} void Print() {
printf("Func Print");
}
};

这里我们可以使用关键词:private、public来控制我们想被人访问的和不想被人访问的成员:

struct Student {
private:
void Print1() {
printf("Func Print1");
} public:
int age;
int sex;
void Print() {
printf("Func Print");
}
};

当我们调用Print1的时候就会发现无法编译:

private(私有)、public(公有)的使用总结:

  1. 对外提供的函数或者变量,定义成public,不能随意改动
  2. 可能会改动的函数或者变量,定义成private,使用时编译器会检测
  3. 只有当前结构体内部函数才可以访问private的成员
  4. private、public可以修饰函数或者变量

那么问题来了,private修饰的函数或者变量真的不能访问吗?并不是,只是我们没有办法通过正常的方式去使

用,但是我们可以使用指针的方式去调用:

那就说明private修饰的成员与普通成员没有区别,只有编译器会检测。

从这节课开始我们不再使用struct作为类的创建,而是直接使用class关键词,其使用没有什么区别,唯一的区

别在于成员默认访问属性不一样,在struct中所有成员默认的属性是public,而在class中则相反:

除此之外还有一个就是在继承时的区别,我们可以将一个正常的struct继承修改成class:

class A {
public:
int x;
int y;
}; class B:A {
public:
int v;
int n;
};

当我们创建对象调用的时候却无法编译:

这是因为在继承的时候默认将继承过来的A的所有成员设置为private,也就是如下代码:

class A {
public:
int x;
int y;
}; class B:A {
public:
int v;
int n;
};

而我们想要外部可以调用可以将private修改成public。最后一个问题:私有成员是否会被继承?

class A {
private:
int x; public:
int y;
}; class B:public A {
public:
int v;
int n;
};
以上代码B继承了A,这里A前面的public代表着,按照A的成员定义的属性继承过来,公有就是公有,私有就是
私有。而在这里我们想要确认B有没有继承A的私有成员,有2个方法:
1.查看数据宽度,显示为16 ![](https://img2022.cnblogs.com/blog/2069956/202205/2069956-20220526113943258-1415386980.png) 2.指针方式调用,可以成功调用获取到值
![](https://img2022.cnblogs.com/blog/2069956/202205/2069956-20220526114110908-1388953256.png) 所以我们得出最终结论:父类的私有成员是可以被继承的,但是也不能直接访问。

C++(类成员的访问控制)的更多相关文章

  1. this、static、main方法、静态代码块、final关键字、Runtime类、Cloneable类、类成员的访问控制权限、异常体系

    this表示当前对象,用在方法内部,当某对象调用该方法时,该方法中的this就代表调用该方法的对象: static关键字: 修饰类属性后,该属性就成为该类所有实例的公共属性,修改该属性值,所有的实例的 ...

  2. 鸡啄米:C++编程之十三学习之类与对象,类的声明,成员的访问控制

    1. 本次学习鸡啄米课程第13篇,把比较重要的学习记录下来,以敦促自己更好的学习.推荐他们的网址学习:http://www.jizhuomi.com/school/c/97.html 2. 在面向过程 ...

  3. C++ 派生类成员的访问属性

    派生类成员的访问属性: C++继承方式总共分为以下几种:public.private.protected三种(它们直接影响到派生类的成员.及其对象对基类成员访问的规则).(1)public(公有继承) ...

  4. Java类成员访问控制权限

    类成员访问控制权限 在JAVA中有四种访问控制权限,分别为:private, default, protected, public 1.Private 如果一个成员方法或变量名前使用了private, ...

  5. Java中Class和单例类的作用与类成员的理解

    Java中Class类的作用与深入理解 在程序运行期间,Java运行时系统始终为所有的对象维护一个被称为运行时的类型标识.这个信息跟踪着每个对象所属的类.JVM利用运行时信息选择相应的方法执行.而保存 ...

  6. PHP中类成员的访问控制

    类成员访问控制: 1.public 默认的,任何地方都可以访问,类内,类外,子类中 2.protected 受保护的,对外是封闭的,但是类内部和子类可以访问 3.private  私有的,仅限于本类中 ...

  7. C++中类成员的访问控制

    结论 首先给出结论,请看下图,看图说话最容易理解了. 类眼中的自己 类中定义的所有成员,不论是以public, protected还是private修饰,对类自身而言,它们都是可见的. 对象眼中的类 ...

  8. OC基础--结构体 枚举做类成员属性

    结构体  枚举作类的成员属性: 定义一个学生类 性别 -- 枚举 生日 入学日期  毕业日期  --  结构体 代码示例: 声明文件 Student.h: #import <Foundation ...

  9. 重载运算符:类成员函数or友元函数

    类成员函数: bool operator ==(const point &a)const { return x==a.x; } 友元函数: friend bool operator ==(co ...

  10. C++类成员布局

    在C++中对象的内存布局与类成员声明的顺序一致,静态成员放在数据区(Data Section)而非对象内存中,若多个类静态成员名称相同,C++则按照name mangling技术进行重命名保证名称的唯 ...

随机推荐

  1. 32-webpack详细配置-entry

    const HtmlWebpackPlugin = require('html-webpack-plugin') const {resolve} = require('path') /** * ent ...

  2. css 文本超出,显示省略号

    单行文本省略号 显示省略号     text-overflow: ellipsis;     overflow: hidden;     max-width: 110px; 文本不换行     wor ...

  3. 快速傅里叶变换FFT学习笔记

    点值表示法 我们正常表示一个多项式的方式,形如 \(A(x)=a_0+a_1x+a_2x^2+...+a_nx^n\),这是正常人容易看懂的,但是,我们还有一种表示法. 我们知道,\(n+1\)个点可 ...

  4. [[SCOI2008]城堡] 解题报告

    [SCOI2008]城堡 最大值最小,显然二分答案,但考虑二分后如何 check. \(n\) 个点 \(n\) 条边,显然这是一个基环树森林.对于基环树,常用的套路是拆环为链,枚举删去哪条边.但这题 ...

  5. 2022-03-23:在k进制下,最小多小的num,可以让1~num范围的数拥有1的个数不少于n个? 腾讯音乐2022校园招聘。

    2022-03-23:在k进制下,最小多小的num,可以让1~num范围的数拥有1的个数不少于n个? 腾讯音乐2022校园招聘. 答案2022-03-23: 二分法. 代码用golang编写.代码如下 ...

  6. 2021-07-13:恢复二叉搜索树。给你二叉搜索树的根节点 root ,该树中的两个节点被错误地交换。请在不改变其结构的情况下,恢复这棵树。进阶:使用 O(n) 空间复杂度的解法很容易实现。你能想出

    2021-07-13:恢复二叉搜索树.给你二叉搜索树的根节点 root ,该树中的两个节点被错误地交换.请在不改变其结构的情况下,恢复这棵树.进阶:使用 O(n) 空间复杂度的解法很容易实现.你能想出 ...

  7. 2021-07-04:股票问题1。给定一个数组 prices ,它的第 i 个元素 prices[i] 表示一支给定股票第 i 天的价格。你只能选择某一天 买入这只股票,并选择在未来的某一个不同的日子

    2021-07-04:股票问题1.给定一个数组 prices ,它的第 i 个元素 prices[i] 表示一支给定股票第 i 天的价格.你只能选择某一天 买入这只股票,并选择在未来的某一个不同的日子 ...

  8. 2021-11-10:O(1) 时间插入、删除和获取随机元素。实现RandomizedSet 类:RandomizedSet() 初始化 RandomizedSet 对象。bool insert(in

    2021-11-10:O(1) 时间插入.删除和获取随机元素.实现RandomizedSet 类:RandomizedSet() 初始化 RandomizedSet 对象.bool insert(in ...

  9. 【Java】连接MySQL问题总结

    前言 最近在学习Java的数据库相关操作,在看视频时自己找资源而产生的一些问题,在此做个总结. 正文 在刚开始学习的时候,你可能跟着老师这样写代码,虽然某些地方已经冒出了红色的波浪线,但你半信半疑的继 ...

  10. 2019年蓝桥杯C/C++大学B组省赛真题(等差数列)

    题目描述: 数学老师给小明出了一道等差数列求和的题目.但是粗心的小明忘记了一部分的数列,只记得其中N 个整数. 现在给出这N 个整数,小明想知道包含这N 个整数的最短的等差数列有几项? 输入格式 输入 ...