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

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.hqwc.cn/news/312413.html

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

相关文章

git(安装,常用命令,分支操作,gitee,IDEA集成git,IDEA集成gitee,IDEA集成github,远程仓库操作)

文章目录 1. Git概述1.1 何为版本控制1.2 为什么需要版本控制1.3 版本控制工具1.4 Git简史1.5 Git工作机制1.6 Git和代码托管中心 2. Git安装3. Git常用命令3.1 设置用户签名3.1.1 说明3.1.2 语法3.1.3 案例实操 3.2 初始化本地库3.2.1 基本语法3.2.2 案例实操3.2.3 结果查看 3…

LDO线性稳压器与开关电源的原理

线性稳压器LDO典型代表&#xff1a;LM7805 ,AMS1117&#xff0c;还有一下性能比较好的LDO&#xff1a; 开关稳压器典型代表&#xff1a;LM2596&#xff0c;MP1584,TPS5430&#xff0c;MP2315S LDO靠发热分散能量&#xff0c;纹波较小一般在30mv以下&#xff1b;DCDC通过开关开断…

SpringBoot实用篇

SpringBoot实用篇 1、热部署 什么是热部署&#xff1f; 所谓热部署&#xff0c;就是在应用正在运行的时候升级软件&#xff0c;却不需要重新启动应用。对于Java应用程序来说&#xff0c;热部署就是在运行时更新Java类文件。 热部署有什么用&#xff1f; 节约时间&#xff0c;热…

Redis 数据结构和常用命令

* 代表多个&#xff0c;&#xff1f;代表一个 &#xff08;不用全部敲出来&#xff0c;按住tab可以自动补全&#xff09; -2是无效&#xff0c;-1是永久有效 &#xff1b;贴心小提示&#xff1a;内存非常宝贵&#xff0c;对于一些数据&#xff0c;我们应当给他一些过期时间&a…

《Python机器学习原理与算法实现》学习笔记

以下为《Python机器学习原理与算法实现》&#xff08;杨维忠 张甜 著 2023年2月新书 清华大学出版社&#xff09;的学习笔记。 根据输入数据是否具有“响应变量”信息&#xff0c;机器学习被分为“监督式学习”和“非监督式学习”。 “监督式学习”即输入数据中即有X变量&…

nodejs+vue+微信小程序+python+PHP技术的健康信息网站-计算机毕业设计推荐

3.2 功能性需求分析 健康信息网站为会员提供健康信息服务的系统&#xff0c;管理员通过登录系统&#xff0c;管理会员信息、健康咨询、健康知识、健康档案、健康养生、健康信息的搜索、健康资讯等。需要学习的会员浏览健康信息网站&#xff0c;查询所有的健康信息&#xff0c;可…

磁盘阵列raid

一、服务器硬件 cpu 、 主板 、内存、硬盘、网卡、电源、raid卡、风扇、远程管理卡 二、硬盘尺寸 目前生产环境中主流的两种类型硬盘 3.5寸 和 2.5寸 硬盘 2.5寸硬盘可以通过使用硬盘托架后适用于3.5寸硬盘的服务器&#xff0c;但是3.5寸没法转换成2.5寸 1.如何在服务器上…

WorkPlus:领先的IM即时通讯软件,打造高效沟通协作新时代

在当今快节奏的商业环境中&#xff0c;高效沟通和协作是企业成功的关键。而IM即时通讯软件作为实现高效沟通的利器&#xff0c;成为了现代企业不可或缺的一部分。作为一款领先的IM即时通讯软件&#xff0c;WorkPlus以其卓越的性能和独特的功能&#xff0c;助力企业打造高效沟通…

mysql获取数据列值(int和string)最大值

最近在开发项目的时候有这么个需求&#xff0c;我数据库里面存了很多升级包&#xff0c;升级包有列数据表示的是升级包的版本号&#xff0c;类型属于字符串&#xff0c;结构类似于V1.0.2.22这种&#xff0c;然后后台有个任务需要获取最新版本号的那条数据。最开始的时候我不知道…

【网络面试(6)】IP协议对网络包的转发

在前面的博客中&#xff0c;我们提到过&#xff0c;网络传输的报文是有真实的数据包和一些头部组成&#xff0c;目前我们了解的头部就有TCP头、IP头、MAC头&#xff0c;而且这三个头部信息都是在应用程序委托给协议栈之后&#xff0c;被写入的相关信息&#xff0c;这些头部都是…

nodejs+vue+微信小程序+python+PHP的医疗报销系统的设计与实现-计算机毕业设计推荐

接着进行系统的需求分析、功能设计、数据库设计&#xff0c;最后进行编码实现。医疗报销系统主要包括了前台和后台信息管理两个部分&#xff0c;前台实现信息浏览、报销申请、意见反馈、个人信息管理等&#xff0c;后台实现新闻资讯管理、报销审核、报销流程管理、系统信息管理…

基于Ubuntu环境Git服务器搭建及使用

基于Ubuntu环境Git服务器搭建及使用 Chapter1 搭建本地git服务器及详细操作步骤1.搭建本地git服务器1.1 环境1.2 服务端配置1.3 创建git专属用户1.4 创建git仓库1.5 配置免密登录基础 2.客户端拉取推送代码2.1客户端创建ssh公钥 2.2 免密配置3.仓库使用&#xff08;拉取及推送代…