面向对象基础-类与对象-封装

1、类与对象

1.1 概念

类:类是一个抽象的概念,用于描述一类对象的特点。

对象:根据类的概念所创造的实体。

【思考】一个对象可以没有对应的类嘛?

不可以,因为必须现有类才能创建对象。

1.2 类的内容

类中最基础的内容包括两部分,一个是属性、一个是行为。

  • 属性:表示一些特征项的数值,比如说:身高、体重、年龄、性别。型号、配色。这些特征项的数值被称为“成员变量”。属性一般以名词存在。
  • 行为:表示能执行的动作,能干什么事?比如说:睡觉、吃饭、打呼噜、打架、唱、跳、rap、打篮球。行为一般是通过 “成员函数” 实现。行为一般以动词存在。

成员 = 成员函数+成员变量。

【例子】以手机为例,来说明类的定义。

规定手机的行为:打游戏、爆炸、飞、打电话、播放音乐。

规定手机的属性:品牌、型号、重量、尺寸。

#include <iostream>using namespace std;// 帕斯卡命名法(大驼峰命名法)
// 每个单词首字母大写
class MobilePhone
{
public: // 权限:public是最开放的权限。
//成员变量string brand;   // 品牌string modle;   // 型号int weight;     // 重量
//成员函数void play_music(){
        cout << "只因你太美,哒哒哒" << endl;}void run_game(){
        cout << "原神启动" << endl;}void call(){
        cout << "上帝您好" << endl;}
};int main()
{return 0;
}

1.3 对象的创建

C++中存在两种类型的对象;(栈内存对象、堆内存对象)

  • 栈内存对象 (类似 struct 结构体创建)

对象所在的{}执行完毕后,自动被销毁

#include <iostream>
using namespace std;
// 帕斯卡命名法(大驼峰命名法)
// 每个单词首字母大写
class MobilePhone
{
public: // 权限:public是最开放的权限。// 成员变量string brand;   // 品牌string modle;   // 型号int weight;     // 重量// 成员函数void play_music(){
        cout << "只因你太美,哒哒哒" << endl;}void run_game(){
        cout << "原神启动" << endl;}void call(){
        cout << "上帝您好" << endl;}
};
int main()
{MobilePhone mp;     // 栈内存对象
    mp.brand = "华为";
    mp.modle = "mate 60 xspro";
    mp.weight = 400;
    cout << mp.brand << " " <<
            mp.modle << " " <<
            mp.weight<< " " << endl;
    mp.play_music();
    mp.run_game();
    mp.call();return 0;
}

  • 堆内存对象 new 创建 (类似malloc)delete 销毁堆空间(类似free)

必须使用new关键字创建,使用指针保存(当前对象的首地址,调用构造函数)。

如果不使用delete关键字销毁,则内存对象会持续存在。导致内存泄漏。

堆内存对象调用成员时,使用->而不是"."(英文“.”自动生成“->”)

#include <iostream>
using namespace std;
// 手机类
// 帕斯卡命名法(大驼峰)
class MobilePhone
{
public:     // 权限:最开放的权限string brand;   // 品牌string modle;   // 型号int weight;     // 重量void play_music(){
        cout << "只因你太美,哒哒哒" << endl;}void run_game(){
        cout << "元神 启动" << endl;}void call(){
        cout << "上帝你好" << endl;}
};
int main()
{
    MobilePhone *mp = new MobilePhone; // 创建堆内存对象
    mp->brand = "华为";
    mp->modle = "mate 60 pro plus";
    mp->weight = 300;
    cout << mp->brand << " " << mp->modle << " " << mp->weight << endl;
    mp->play_music();
    mp->run_game();
    mp->call();delete mp; // 手动销毁
    mp = NULL;//建议置为空,防止后面调用return 0;
}

2、封装

在上一节中MobilPhone类与结构体差别不大,实际上可以认为结构体就是一种完全开放的类。

封装指的是,将类的一些属性和细节隐藏。重新提供对外访问的接口。封装可以提升代码的安全性。并且可以让程序员更关注上层架构而非内部逻辑。

private:私有权限,最封闭的权限,只能在类内访问
public:权限:public是最开放的权限。

#include <iostream>
using namespace std;
// 帕斯卡命名法(大驼峰命名法)
// 每个单词首字母大写
class MobilePhone
{
private: // 私有权限,最封闭的权限,只能在类内访问string brand;   // 品牌string modle;   // 型号int weight;     // 重量public: // 权限:public是最开放的权限。// 品牌的get函数string get_brand(){return brand;}// 型号的get函数string get_modle(){return modle;}// 重量的get函数int get_weight(){return weight;}// 品牌的set函数void set_brand(string b){
        brand = b;}//型号的setvoid set_modle(string m){
        modle=m;}//重量的setvoid set_weight(int w){
        weight=w;}
};
int main()
{// 栈内存对象MobilePhone mp1;
    mp1.set_brand("中兴");
    mp1.set_modle("utrl");
    mp1.set_weight(444);
    cout << mp1.get_brand() << " "<<
            mp1.get_modle() << " "<<
            mp1.get_weight() << endl;//堆内存对象
    MobilePhone *mp2=new MobilePhone;
    mp2->set_brand("华为");
    mp2->set_modle("mate60");
    mp2->set_weight(9000);
    cout << mp2->get_brand() << " "<<
            mp2->get_modle() << " "<<
            mp2->get_weight() << endl;return 0;
}

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

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

相关文章

pygame学习(一)——pygame库的导包、初始化、窗口的设置、打印文字

导语 pygame是一个跨平台Python库(pygame news)&#xff0c;专门用来开发游戏。pygame主要为开发、设计2D电子游戏而生&#xff0c;提供图像模块&#xff08;image&#xff09;、声音模块&#xff08;mixer&#xff09;、输入/输出&#xff08;鼠标、键盘、显示屏&#xff09;…

maven中dependencyManagement标签

简介 dependencyManagement正如其名&#xff0c;用于项目依赖的统一管理。 在父项目中的pom.xml文件中加入dependencyManagement标签即可完成依赖版本的声明。在声明完成后&#xff0c;子项目&#xff08;module&#xff09;中引用相同的依赖时可以不指定version标签自动引入…

【26.4K⭐】ShareX:一款开源免费、功能强大且丰富的截屏录屏软件

【26.4K⭐】ShareX&#xff1a;一款开源免费、功能强大且丰富的截屏录屏软件 在日常工作、学习和娱乐过程中&#xff0c;我们经常需要截取屏幕或者录制屏幕上特定区域中的内容并进行标记、编辑等操作。无论是为了记录重要的信息、分享有趣的内容&#xff0c;还是为了制作教程和…

toto的2023年终总结

第一次写年终总结&#xff0c;其实顺带是把大学四年的学习都给总结了一下&#xff0c;称之为大学总结更为合适吧&#xff1f; 其实把年终总结发在CSDN上有些不适&#xff0c;之前一直想着搭一个自己的博客也因为种种事情一直没有完成&#xff0c; 索性发在这里了&#xff0c;作…

20231228在Firefly的AIO-3399J开发板的Android11的Firefly的AIO-3399J开发板的DTS配置单前置摄像头ov13850

20231228在Firefly的AIO-3399J开发板的Android11的Firefly的AIO-3399J开发板的DTS配置单前置摄像头ov13850 2023/12/28 12:30 开发板&#xff1a;Firefly的AIO-3399J【RK3399】 SDK&#xff1a;rk3399-android-11-r20211216.tar.xz【Android11】 Android11.0.tar.bz2.aa【ToyBr…

unity学习笔记----游戏练习03

一、修复植物种植的问题 1.当手上存在植物时&#xff0c;再次点击卡片上的植物就会在手上添加新的植物&#xff0c;需要修改成只有手上没有植物时才能再次获取到植物。需要修改AddPlant方法。 public bool AddPlant(PlantType plantType) { //防止手上出现多个植…

分享一个学习Typescript最全的Github网站

一个专注研究Typescript的网站&#xff0c;&#x1f396;&#x1f396;&#x1f396;在这里你可以全面深入学习Typescript相关知识,通过动画方式讲解TS&#xff0c;还有很多常见问题解答。你还可以挑战相应的题目&#xff0c;快来学习吧 我就懒一点&#xff0c;直接原滋原味的…

c语言:打印平行四边形|练习题

一、题目 输入平行四边形的边数&#xff0c;用星号打印平行四边形 如图&#xff1a; 二、思路分析 图形分为两部分 1、左边的空格 2、右边的星号 因此&#xff0c;把空格和星号合起来&#xff0c;就是要求的图形 三、代码图片【带注释】 四、源代码【带注释】 #include <s…

【AI】计算机视觉VIT文章(Transformer)源码解析

论文&#xff1a;Dosovitskiy A, Beyer L, Kolesnikov A, et al. An image is worth 16x16 words: Transformers for image recognition at scale[J]. arXiv preprint arXiv:2010.11929, 2020 源码的Pytorch版&#xff1a;https://github.com/lucidrains/vit-pytorch 0.前言 …

三角函数两角和差公式推导

一.几何推理 1.两角和公式 做一斜边为1的直角△ABC,任意旋转非 k Π , k N kΠ,kN kΠ,kN,补充如图,令 ∠ A B C ∠ α &#xff0c; ∠ C B F ∠ β ∠ABC∠α&#xff0c;∠CBF∠β ∠ABC∠α&#xff0c;∠CBF∠β ∴ ∠ D B F ∠ D B A ∠ α ∠ β 90 , ∠ D A …

Linux基础知识学习3

vim编辑器 其分为四种模式 1.普通(命令)模式 2.编辑模式 3.底栏模式 4.可视化模式 vim编辑器被称为编辑器之神&#xff0c;而Emacs更是神之编辑器 普通模式&#xff1a; 1.光标移动 ^ 移动到行首 w 跳到下一个单词的开头…

C#中使用as关键字将对象转换为指定类型

目录 一、定义 二、示例 三、生成 使用as关键字可以将对象转换为指定类型&#xff0c;与is关键字不同&#xff0c;is关键字用于检查对象是否与给定类型兼容&#xff0c;如果兼容则返回true&#xff0c;如果不兼容则返回false。而as关键字会直接进行类型转换&#xff0c;如果…

小白备战蓝桥杯:Java集合与数据结构

目录 什么是集合&#xff1f; 集合的分类 <> : 泛型 浅谈泛型 代码示例 细说泛型 泛型类 泛型方法 泛型接口 泛型通配符 Collection接口 集合的通用遍历方式 1、迭代器遍历 2、增强for循环 3、forEach方法 4、代码示例 List接口 方法 List集合的遍历方…

【哈希数组】697. 数组的度

697. 数组的度 解题思路 首先创建一个IndexMap 键表示元素 值表示一个列表List list存储该元素在数组的所有索引之后再次创建一个map1 针对上面的List 键表示列表的长度 值表示索引的差值遍历indexmap 将所有的list的长度 和 索引的差值存储遍历map1 找到最大的key 那么这个Ke…

基于Python的B站排行榜大数据分析与可视化系统

温馨提示&#xff1a;文末有 CSDN 平台官方提供的学长 QQ 名片 :) 1. 项目简介 本文介绍了一项基于Python的B站排行榜大数据分析与可视化系统的研究。通过网络爬虫技术&#xff0c;系统能够自动分析B站网址&#xff0c;提取大量相关文本信息并存储在系统中。通过对这些信息进行…

LoongArch指令集-特权指令系统——摘抄自胡伟武体系结构和龙芯架构32位精简版参考手册

例外与中断 1 中断 1.1 中断类型 龙芯架构 32 位精简版下的中断采用线中断的形式。每个处理器核内部可记录 12 个线中断&#xff0c;分别是&#xff1a;1 个核间中断&#xff08;IPI&#xff09;&#xff0c;1 个定时器中断&#xff08;TI&#xff09;&#xff0c;8 个硬中断…

CSAPP: LinkBomb 重定位和链接题解(一)

前言 我看了一下&#xff0c;网上关于 LinkBomb 的题解不是很多&#xff0c;LinkBomb 不是 CSAPP 目前大纲的内容&#xff0c;大多数都是写的 LinkLab。如果你做的作业内容是要求每关输出学号&#xff0c;那么你就是跟我一样的 LinkBomb 的实验&#xff08;需要注意的是&#…

emacs:Searching for program: No such file or directory,sml;

首先&#xff0c;编辑一个现有的或新的 SML 文件&#xff08;如果没有其他方便的方法&#xff0c;可尝试C-x C-f test.smlC-x C-f test.sml 创建一个新文件&#xff09;。你会看到 Emacs 窗口底部的模式显示从 "基本"&#xff08;或其他任何模式&#xff09;变成了 S…

OSG 关于MVPW变换

目录 1、模型 Model 2、观察矩阵 ViewMatrix 4、窗口矩阵变化 5、总结 在osg中观察矩阵接口设置如下: 其中eye是相机的世界坐标位置,center是相机观察的位置,up是相机向上向量。 在计算机的三维世界中&#xff0c;相机如同我们的眼睛&#xff0c;捕捉眼前的每一副画面&#xff…

20231231_小米音箱接入chatgpt

参考资料&#xff1a; GitHub - yihong0618/xiaogpt: Play ChatGPT and other LLM with Xiaomi AI Speaker 小爱音箱ChatGPT的折腾记录&#xff1a;win平台部署并运行成功_哔哩哔哩_bilibili GitHub - chatanywhere/GPT_API_free: Free ChatGPT API Key&#xff0c;免费Chat…