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

news2025/4/22 5:38:01

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;
    }
    //型号的set
    void set_modle(string m)
    {
        modle=m;
    }
    //重量的set
    void 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.coloradmin.cn/o/1346222.html

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

相关文章

x-cmd pkg | fzf - 命令行模糊查找器

目录 简介首次用户功能特点竞品和相关作品进一步阅读 简介 fzf 是一个由 Go 编写的命令行模糊搜索工具&#xff0c;用于在大量文本数据中快速定位和选择内容&#xff0c;可以与任何列表一起使用&#xff08;e.g. 文件、命令历史记录、进程、主机名、书签、git 提交等&#xff…

鲲志说:向我乘风破浪,好事多磨的2023致敬!(感恩有礼,感谢有你)

伴随着2023最后一个工作日的结束&#xff0c;也终于要给一年的工作划上一个结尾了&#xff0c;当然&#xff0c;也要给自己一个交代&#xff0c;给自己一个年度总结 2023年&#xff0c;大的挫折也是有的&#xff0c;但我相信好事多磨&#xff0c;总的来说是事业型的一年&#x…

华为ensp网络设计期末测试题-复盘

网络拓扑图 地址分配表 vlan端口分配表 需求 The device is running!<Huawei>sys Enter system view, return user view with CtrlZ. [Huawei]un in en Info: Information center is disabled. [Huawei]sys S1 [S1]vlan 99 [S1-vlan99]vlan 100 [S1-vlan100]des IT [S1-…

关于“Python”Django 管理网站的核心知识点整理大全52

目录 注意 18.2.2 激活模型 settings.py 18.2.3 Django 管理网站 1. 创建超级用户 注意 2. 向管理网站注册模型 admin.py 注意 3. 添加主题 Climbing。 18.2.4 定义模型 Entry models.py 18.2.5 迁移模型 Entry 18.2.6 向管理网站注册 Entry admin.py 往期快速…

十三:爬虫-Scrapy框架(下)

一&#xff1a;各文件的使用回顾 1.items的使用 items 文件主要用于定义储存爬取到的数据的数据结构&#xff0c;方便在爬虫和 Item Pipeline 之间传递数据。 items.pyimport scrapyclass TencentItem(scrapy.Item):# define the fields for your item here like:title scr…

c++简易AI

今天小编一时雅兴大发&#xff0c;做了一个c的简易AI&#xff0c;还是很垃圾的&#xff01; 题外话&#xff08;每期都会有&#xff09;&#xff1a;我的蛋仔名叫酷影kuying&#xff0c;大家能加我好友吗&#xff1f; 上代码咯&#xff01; #include<bits/stdc.h> #in…

2023年终总结丨很苦,很酷!

文章目录 个人简介丨了解博主写在前面丨博主介绍年终总结丨博主成就年终总结丨博主想说年终总结丨学习芝士年终总结丨未来展望写在后面丨新年快乐 个人简介丨了解博主 主页地址&#xff1a;https://blog.csdn.net/m0_68111267 荣誉身份 ⭐2022年度CSDN 社区之星 Top6 ⭐2023年…

基于NASM搭建一个能编译汇编语言的汇编软件工具环境(利用NotePad++)

文章目录 一、创建汇编语言源程序二、Notepad的下载、安装、使用三、下载和安装编译器NASM3.1 下载NASM编译器3.2 安装并配置环境变量 四、编译汇编语言源程序&#xff08;使用命令&#xff09;五、下载和使用配套源码及工具六、将编译功能集成到Notepad 一、创建汇编语言源程序…

vue3中pinia的使用及持久化(详细解释)

解释一下pinia&#xff1a; Pinia是一个基于Vue3的状态管理库&#xff0c;它提供了类似Vuex的功能&#xff0c;但是更加轻量化和简单易用。Pinia的核心思想是将所有状态存储在单个store中&#xff0c;并且将store的行为和数据暴露为可响应的API&#xff0c;从而实现数据&#…

[设计模式 Go实现] 创建型~工厂方法模式

工厂方法模式使用子类的方式延迟生成对象到子类中实现。 Go中不存在继承 所以使用匿名组合来实现 代码实现 package factorymethod//Operator 是被封装的实际类接口 type Operator interface {SetA(int)SetB(int)Result() int }//OperatorFactory 是工厂接口 type OperatorF…

国图公考:研究生可以考选调生吗?

研究生可以报考选调生吗?当然是可以的&#xff0c;但是同样需要满足一定的条件才可以。 除本科生外&#xff0c;具有硕士、博士学位的考生均可申请考试。但是&#xff0c;除了满足应届毕业生的身份&#xff0c;还需要满足年龄限制。一般来说&#xff0c;本科生不超过25岁&…

文件批量整理,文件归类整理,文件批量归类

我们每天都要面对无数的文件&#xff0c;从工作报告、个人照片到电影和音乐。如何有效地管理和归类这些文件&#xff0c;成为了我们日常生活和工作中所要处理的。今天&#xff0c;小编就给大家介绍一款简单易用的工具——文件批量改名高手&#xff0c;助你轻松实现文件批量归类…

基于DBNetpp的文本检测的仪表盘读数识别

一个不知名大学生&#xff0c;江湖人称菜狗 original author: Jacky Li Email : 3435673055qq.com Time of completion&#xff1a;2023.12.31 Last edited: 2023.12.31 祝自己生日快乐啦&#xff01;&#xff01;&#xff01;&#xff01; 目录 算法设计 &#xff08;1&…

【逗老师的无线电】ICOM IC-705终端模式Terminal Mode直连反射器配置-内置网关IP直连篇

各位友台大家好呀&#xff0c;逗老师最近整了一台IC-705&#xff0c;最吸引人的莫过于这玩意可以IP直连反射器。下面简单介绍一下这个功能和其配置方法 目录 一、功能二、依赖条件三、配置3.1、IC-705连接WIFI3.2、配置Terminal Mode3.2.1、点击MENU进入菜单&#xff0c;翻到第…

数据库的学习笔记——第一篇

SQL通用语法 SQL语句 DDL 数据定义 数据库、表字段 DML 数据操作 增删改 DQL 数据查询 查询表中记录 DCL 数据控制 创建用户、控制用户权限 DLL语句——数据库操作 SHOW DATABASES; # 查询数据库SELECT DATABASE(); # 查询当前数据库CREATE DATABASE [IF …

简单几步制作翻页电子画册

翻页电子画册是一种非常流行的电子书形式&#xff0c;它能够以生动、美观、有趣的方式展示您的内容。如果您想要制作自己的翻页电子画册&#xff0c;以下是一些简单的步骤&#xff0c;可以帮助您轻松上手。 首先&#xff0c;你需要一款在线制作电子杂志平台。比如FLBOOK&#x…

[NCTF 2022]calc

[NCTF 2022]calc 考点&#xff1a;python环境变量注入 打开题目&#xff0c;F12有hint 访问一下得到源码 app.route("/calc",methods[GET]) def calc():ip request.remote_addrnum request.values.get("num")log "echo {0} {1} {2}> ./tmp/log…

DragonEnglish:COCA20000+单词+释义

去年的时候接触到了 COCA20000 单词&#xff0c;对这种给单词特定顺序的方式蛮感兴趣的。因为我当时接触的版本只有单词或者单词释义的版本&#xff0c;所以我直接通过各种方式给它搭配了音标例句发音&#xff0c;然后每100个切割成1份&#xff0c;分成了 202 个文件来学习&…

AIGC重塑基础设施,高密数据中心为何众望所归?

凯文凯利在《必然》中认为&#xff0c;科技在本质上有所偏好&#xff0c;使得它朝往某种特定方向。 毫无疑问&#xff0c;进入到数字经济时代&#xff0c;人工智能技术飞速发展与加速应用之际&#xff0c;这个特定方向逐渐明朗&#xff1a;即算力科技&#xff0c;算力已经成为…

数据结构【线性表篇】(二)

数据结构【线性表篇】(二&#xff09; 文章目录 数据结构【线性表篇】(二&#xff09;前言为什么突然想学算法了&#xff1f;为什么选择码蹄集作为刷题软件&#xff1f; 目录一、单链表(一)、单链表的定义(二)、单链表的建立(三)、单链表的插入删除(四)、单链表的查找 二、主函…