十五、类与封装的概念

1、类的封装

C++中类的封装:

  • 成员变量:C++中用于表示类属性的变量
  • 成员函数:C++中用于表示类行为的函数
  • C++中可以给成员变量和成员函数定义访问级别

    • public:成员变量和成员函数可以在类的內部和外界访问和调用
    • private:成员变量和成员函数只能在类的内部被访问和调用
#include <stdio.h>struct Biology 
{bool living;
};struct Animal : Biology 
{bool movable;void findFood(){ }
};struct Plant : Biology 
{bool growable;
};struct Beast : Animal 
{void sleep() { }
};struct Human : Animal 
{void sleep() { printf("I'm sleeping...\n");}void work() { printf("I'm working...\n");}
};struct Girl : Human
{
private:int age;int weight;    
// private修饰两个属性,定义访问级别为私有public:void print(){age = 22;weight = 48;printf("I'm a girl, I'm %d years old.\n", age);printf("My weight is %d kg.\n", weight);}
};struct Boy : Human
{
private:int height;int salary;
public:int age;int weight;void print(){height = 175;salary = 9000;printf("I'm a boy, my height is %d cm.\n", height);printf("My salary is %d RMB.\n", salary);}    
};int main()
{Girl g;Boy b;g.age = 20;        // 编译不过g.print();        // 通过print()去访问b.age = 19;        // okb.weight = 120;b.height = 180;    // errb.print();return 0;
}

2、类成员的作用域

类成员的作用域:

  • 类成员的作用域都只在类的内部,外部无法直接访问
  • 成员函数可以直接访问成员变量和调用成员函数
  • 类的外部可以通过类变量访问public成员
  • 类成员的作用域与访问级别没有关系

C++中用struct定义的夫中所有成员默认为 public

#include <stdio.h>int i = 1;struct Test
{
private:int i;public:int j;int getI(){i = 3;return i;}
};int main()
{int i = 2;Test test;test.j = 4;printf("i = %d\n", i);              // i = 2;printf("::i = %d\n", ::i);          // ::i = 1; 访问默认命名空间,即全局作用域// printf("test.i = %d\n", test.i);    // Error, test.i是私有的printf("test.j = %d\n", test.j);    // test.j = 4printf("test.getI() = %d\n", test.getI());  // test.getI() = 3return 0;
}

3、小结

类通常可以分为使用方式和内部细节两部分

类的封裝机制使得使用方式和内部细节相分离

C++中通过定义类成员的访问级别实现封装机制

public成员可以在类的内部和外界访问和调用

private成员只能在类的内部被访问和调用

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/450739.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

哪些人不能要 哪些人不能留

以下所有的论断都是基于中小型实业公司而言&#xff0c;因为我任职过的公司都是这个类型的。招聘时这些人不能要&#xff1a;1&#xff09;频繁跳槽的人。这些人要么对工作不用心&#xff0c;要么对环境的适应能力差&#xff0c;要么不愿去分析公司的长处和短处&#xff0c;要么…

vue项目中axios的封装

1.安装 1 npm install axios --save 2.新建http.js&#xff0c;封装拦截器以及多种请求方式 1 import axios from axios;2 import { Message } from element-ui;3 4 // 请求拦截器5 axios.interceptors.request.use( 6 config > {7 //发送请求前需要做什么&#xff0c…

【2022】Java基础面试真题

文章目录1. Java基础1.1 为什么Java代码可以实现一次编写、到处运行&#xff1f;1.2 一个Java文件里可以有多个类吗&#xff08;不含内部类&#xff09;&#xff1f;1.3 说一说你对Java访问权限的了解1.4 介绍一下Java的数据类型1.5 int类型的数据范围是多少&#xff1f;1.6 请…

关于 Virtual SAN/VSAN 的常见问题解答

问&#xff1a;VSAN需要使用 SSD&#xff0c;它有什么用途呢&#xff1f; 答&#xff1a;SSD 用于读取缓存 (70%) 和写入缓冲 (30%)。每次写入都会先转到 SSD&#xff0c;稍后再取消暂存到 HDD。 • 问&#xff1a;创建 VSAN 虚拟机存储策略时&#xff0c;何时应使用“允许的故…

IntelliJ IDEA 中 右键新建时,选项没有Java class的解决方法和具体解释

前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家。点击跳转到教程。 我是在别人问我的时候&#xff0c;才发现还可以有这个问题&#xff0c;主要是他新项目直接打开&#xff0c;什么都没配置&#xff0c;就打…

设计模式大集锦 程序员面试全攻略

摘要&#xff1a;无论你是参与Java面试还是C#面试&#xff0c;设计模式和软件设计问题在程序员面试中是必不可少的一部分。编程和设计技两者相得益彰&#xff0c;一名出色的程序员也是一名出色的设计师&#xff0c;他们懂得如何利用代码来解决问题或者软件设计&#xff0c;但是…

NOIP2018划水记

Day -INF&#xff1a; 提前两周左右停的课吧&#xff0c;每天过着正常的机房生活&#xff0c;每天充满了欢乐。中间夹着篮球赛&#xff0c;qmcp大展神威&#xff08;%%%&#xff09;&#xff0c;MVP当之无愧&#xff0c;我跟着我们班一群菜鸡划水水出了季军&#xff08;汗&…

多线程锁,线程池,消费者生产者模型

锁是怎么存在的? 在python建立之初,开发者目的是为了快速把语言开发出来,如果加上GIL(c语言加锁),切换时按照100条字节指令来进行线程间的切换 为什么加锁? 非线程安全,控制一段代码 1.lock threading.BoundedSemaphore一次可以限制关卡,限制通行次数,不过这个是写死的 1 im…

【2022】多线程并发编程面试真题

文章目录4. 多线程4.1 创建线程有哪几种方式&#xff1f;4.2 说说Thread类的常用方法4.3 run()和start()有什么区别&#xff1f;4.4 线程是否可以重复启动&#xff0c;会有什么后果&#xff1f;4.5 介绍一下线程的生命周期4.6 如何实现线程同步&#xff1f;4.7 说一说Java多线程…

苹果面试8大难题及答案

摘要&#xff1a;苹果这样的公司通常会在面试过程中向求职者抛出一些逻辑的问题来考研面试者&#xff0c;所以&#xff0c;如果你对进入苹果感兴趣&#xff0c;或者向往类似的公司&#xff0c;又或者只是对逻辑问题感兴趣&#xff0c;这些面试难题值得你仔细研究。 导读&#x…

idea自动导入jar包的快捷键

前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家。点击跳转到教程。 见&#xff1a;http://blog.csdn.net/u014771464/article/details/52330254 altenter&#xff08;光标紧跟在类的后面&#xff09;

ROS系统玩转自主移动机器人(3)-- 开源机器人结构介绍

ROS系统玩转自主移动机器人&#xff08;3&#xff09;-- 开源机器人结构介绍 本机器人机械结构设计相关的所有设计文件下载地址为&#xff1a;传送门 其中包含&#xff1a;三维造型设计文件&#xff08;所有零件装配效果&#xff09;&#xff08;tips&#xff1a;基于Solidwork…

【2022】JVM常见面试真题详解

文章目录5. JVM5.1 JVM包含哪几部分&#xff1f;5.2 JVM是如何运行的&#xff1f;5.3 Java程序是怎么运行的&#xff1f;5.4 本地方法栈有什么用&#xff1f;5.5 没有程序计数器会怎么样&#xff1f;5.6 说一说Java的内存分布情况5.7 类存放在哪里&#xff1f;5.8 局部变量存放…

Linux 基本操作--文件查看 (day3)

一、查看文件-----cat (详情参考:http://blog.sina.com.cn/s/blog_52f6ead0010127xm.html) 语法结构: cat 查看方式 文件 cat -A : show all 显示所有内容,相当于-vET [rootlocalhost tmp]# cat -A /etc/profile #注释:查看/erx/目录下profile文件的内容 cat -b  :对非空…

如何在面试时写出高质量的代码

摘要&#xff1a;有些程序员由于平时没有养成良好的编程习惯&#xff0c;在面试时写出的代码质量不高&#xff0c;最终遗憾地与心仪的公司和职位失之交臂。如何在面试时能写出高质量的代码&#xff0c;是很多程序员关心的问题。 程序员在职业生涯中难免要接受编程面试。有些程序…

IntelliJ IDEA添加jar包

见&#xff1a;http://blog.csdn.net/a153375250/article/details/50851049 以JDBC-MySQL驱动包为例 1、在IntelliJ IDEA中打开要添加jar包的Project 2、File – Project Structure如下图 3、选择Moudules – 再选择Dependencies如下图 4、选中Moudule source – 然后点击2处号…

Python3 与 C# 并发编程之~ 进程篇

上次说了很多Linux下进程相关知识&#xff0c;这边不再复述&#xff0c;下面来说说Python的并发编程&#xff0c;如有错误欢迎提出&#xff5e; 如果遇到听不懂的可以看上一次的文章&#xff1a;https://www.cnblogs.com/dotnetcrazy/p/9363810.html 官方文档&#xff1a;https…

11月12号 用户登录输入密码错误达到指定次数后,锁定账户 004

用户表里添加两个属性 连续密码输错次数private Integer loginFailCount;/** 登录失败禁用时间 */ private Date missDate; / 如果登录错误次数大于5次 规定时间内禁止登录if(dbUser.getLoginFailCount() ! null && dbUser.getLoginFailCount() > 3){if(DateUtils.…

Goobuntu:谷歌的内部桌面系统

摘要&#xff1a;大多数Linux用户都知道Google用Linux作为它们的桌面和服务器端操作系统&#xff0c;有的人可能还知道Google选择的是定制的Ubuntu——Goobuntu&#xff0c;但在此之前几乎没有Google外部人员了解他们究竟是如何使用Ubuntu的&#xff0c;8月29日&#xff0c;Tho…

Springboot 之 Hibernate自动建表(Mysql)

前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家。点击跳转到教程。 引入Maven依赖包 <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-…