C++(2)类与对象(上)

1.面向过程和面向对象初步认识

C语言是面向过程的,关注的是过程,分析出求解问题的步骤,通过函数调用逐步解决问题。
C++是基于面向对象的,关注的是对象,将一件事情拆分成不同的对象,靠对象之间的交互完成。

2.类的引入

c语言中,结构体中只能定义变量,在C++中,结构体内不仅可以定义变量,也可以定义函数。

3.类的定义

//类 class Person { //可以定义成员函数 void Print() { cout << _age << endl; } //定义成员变量时前面建议加_ char _name[10]; int _age; };

class为定义类的关键字,ClassName为类的名字,{中为类的主体,注意类定义结束时后面分号。
类中的元素称为类的成员:类中的数据称为类的属性或者成员变量:类中的函数称为类的方法或者成员函数。

类的两种定义方式:

1.声明和定义全部放在类体中,需要注意:成员函数如果在类中定义,编译器可能会将其当成内联函数处理。

//人 class Person { public: //显示基本信息 void showinfo() { cout << _name << "-" << _sex << "-" << age << endl; } public: char* _name; char* _age; int _age; };

2.声明放在.h文件中,类的定义放在.cpp文件中。

声明放在类的头文件person.h中

//人 class Person { public: //显示基本信息 void showInfo(); public: char* _name; char* _age; int _age; };

定义放在类的实现文件person.cpp中

#include "person.h" //显示基本信息 void Person::showInfo() { cout << _name << "-" << _age << "-" << _sex << endl; }

一般情况下,更期望采取第二种方式。

4.类的访问限定符及封装

4.1 访问限定符

C++实现封装的方式:用类将对象的属性与方法结合在一块,让对象更加完善,通过访问权限选择性的将其接口提供给外部的用户使用。

#include<iostream> using namespace std; class Student { //公有的方法 public: void ShowInfo() { cout << _name << endl; cout << _age << endl; cout << _stuid << endl; } //一般情况下, //成员变量都是比较隐私的, //都会定义成私有或者保护 private: char _name[20]; int _age; int _stuid; }; int main() { Student s1; Student s2; return 0; }

【访问限定符说明】
1.public修饰的成员在类外可以直接被访问
2.protected和private修饰的成员在类外不能直接被访问(此处protected和private是类似的)
3.访问权限作用域从该访问限定符出现的位置开始直到下一个访问限定符出现时为止
4.class的默认访问权限为private,struct为public(因为struct要兼容c)
注意:访问限定符只在编译时有用,当数据映射到内存后,没有任何访问限定符上的区别

【面试题】
问题:C++中struct和class的区别是什么?
解答:C++需要兼容C语言,所以C++中struct可以当成结构体去使用。另外C++中struct还可以用来定义类。和class是定义类是一样的,区别是struct的成员默认访问方式是public,class是struct的成员默认访问方式是private。

4.2 封装

【面试题】
面向对象的三大特性:封装继承多态
在类和对象阶段,我们只研究类的封装特性,那什么是封装呢?
封装:将数据和操作数据的方法进行有机结合,隐藏对象的属性和实现细节,仅对外公开接口来和对象进行交互。

封装本质上是一种管理:我们如何管理兵马俑呢?比如如果什么都不管,兵马俑就被随意破坏了。那么我们首先建了一座房子把兵马俑给封装起来。但是我们目的全封装起来,不让别人看。所以我们开放了售票通道,可以买票突破封装在合理的监管机制下进去参观。类也是一样,我们使用类数据和方法都封装到一下。
不想给别人看到的,我们使用protected/private把成员封装起来。开放一些共有的成员函数对成员合理的访问。所以封装本质是一种管理。

5.类的作用域

类定义了一个新的作用域,类的所有成员都在类的作用域中**。*在类体外定义成员,需要使用:作用域解析符指明成员属于哪个类域。

#include<iostream> using namespace std; //人 class Person { public: //显示基本信息 void showInfo(); public: char* _name; char* _age; int _age; }; //这里需要指定showInfo属于Person这个类域 void Person::showInfo() { cout << _name << "-" << _age << "-" << _sex << endl; }

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

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

相关文章

USB2.0入门教程:枚举过程的核心要点解析

USB2.0枚举全解析&#xff1a;从插入到识别的底层真相你有没有遇到过这样的情况——把一个自制的USB设备插进电脑&#xff0c;系统却弹出“未知USB设备”的提示&#xff1f;或者设备反复断开重连&#xff0c;像在跟你玩捉迷藏&#xff1f;问题很可能出在一个你没怎么注意、但至…

【卫星】全球导航卫星系统信号处理、误差分析和定位的MATLAB 实现

✅作者简介&#xff1a;热爱科研的Matlab仿真开发者&#xff0c;擅长数据处理、建模仿真、程序设计、完整代码获取、论文复现及科研仿真。&#x1f34e; 往期回顾关注个人主页&#xff1a;Matlab科研工作室&#x1f447; 关注我领取海量matlab电子书和数学建模资料 &#x1f34…

Java中多线程异步调用

新启动一个或多个线程去完成所要完成的工作&#xff0c;主线程继续执行&#xff0c;互不干扰。异步场景&#xff1a;1、视频文件的格式转换&#xff08;比较耗时&#xff09;&#xff1b;2、一般都是耗时的步骤&#xff0c;使用一个新的线程去完成&#xff0c;主线程不受限制&a…

从传统到AI原生:用户画像技术的代际演进分析

从传统到AI原生&#xff1a;用户画像技术的代际演进分析关键词&#xff1a;用户画像、传统技术、AI原生、代际演进、个性化服务摘要&#xff1a;用户画像是互联网时代的“数字身份证”&#xff0c;从早期的手工标签到今天的AI自动生成&#xff0c;技术演进背后是数据、算法与需…

一文说清Keil4在工业通信协议中的应用

深入工业通信一线&#xff1a;Keil4如何撑起嵌入式协议开发的“硬核”底座 在一条自动化生产线上&#xff0c;机械臂精准抓取、传送带有序流转、传感器实时反馈——这些看似流畅的动作背后&#xff0c;是一套严密的“神经系统”在默默支撑。这个系统的核心&#xff0c;不是某个…

深度剖析CANFD和CAN在车载网络中的差异

CAN FD vs. CAN&#xff1a;车载网络的进化之路&#xff0c;不只是“快”那么简单 你有没有遇到过这样的场景&#xff1f; 一台搭载多传感器的智能汽车&#xff0c;在进行OTA升级时耗时长达半小时&#xff1b;ADAS系统因总线拥堵偶尔出现目标漏检&#xff1b;域控制器之间通信…

计算机毕业设计springboot幸福社区疫苗预约管理系统 基于Spring Boot的社区疫苗预约与管理系统设计与实现 社区疫苗预约管理平台的Spring Boot开发与应用

计算机毕业设计springboot幸福社区疫苗预约管理系统f5fzf9&#xff08;配套有源码 程序 mysql数据库 论文&#xff09; 本套源码可以在文本联xi,先看具体系统功能演示视频领取&#xff0c;可分享源码参考。随着信息技术的飞速发展&#xff0c;社区服务的数字化转型成为提升居民…

任意二阶量子门作用于多量子比特系统的状态向量演化公式摘要

本文系统阐述了一个任意22幺正矩阵&#xff08;二阶量子门&#xff09;作用于n-qubit量子寄存器中单个量子比特时&#xff0c;整个系统状态向量的精确计算公式。我们从基本原理出发&#xff0c;通过张量积代数和索引映射&#xff0c;推导出可直接用于算法实现的核心公式&#x…

JWT鉴权的庖丁解牛

JWT&#xff08;JSON Web Token&#xff09;鉴权是一种无状态、自包含的认证机制&#xff0c;其核心在于 “信任签名&#xff0c;而非存储”。一、JWT 结构&#xff1a;三段式 Base64Url 编码 xxxxx.yyyyy.zzzzz ↑ ↑ ↑ Header.Payload.Signature1. Header&#xff0…

d3dx9_30.dll文件丢失找不到问题 免费下载方法分享

在使用电脑系统时经常会出现丢失找不到某些文件的情况&#xff0c;由于很多常用软件都是采用 Microsoft Visual Studio 编写的&#xff0c;所以这类软件的运行需要依赖微软Visual C运行库&#xff0c;比如像 QQ、迅雷、Adobe 软件等等&#xff0c;如果没有安装VC运行库或者安装…

计算机毕业设计springboot实习生校内事务管理系统 基于Spring Boot的实习生校园事务综合管理系统 Spring Boot驱动的实习生校内事务信息化平台

计算机毕业设计springboot实习生校内事务管理系统b29h3 &#xff08;配套有源码 程序 mysql数据库 论文&#xff09; 本套源码可以在文本联xi,先看具体系统功能演示视频领取&#xff0c;可分享源码参考。随着信息化时代的快速发展&#xff0c;传统的实习生校内事务管理方式面临…

机器学习:强化学习算法

摘要&#xff1a;强化学习是机器学习的一个分支&#xff0c;通过智能体与环境的交互来学习最优策略。核心要素包括智能体、环境、状态、动作、奖励和策略。智能体通过试错过程&#xff0c;根据环境反馈的奖励调整策略&#xff0c;目标是最大化长期累积奖励。主要算法包括基于价…

【无宏恐惧】告别VBA禁用!用纯BAT脚本实现Excel复杂档案编号批量生成

当Excel弹出“宏已被禁用”的警告时&#xff0c;你的自动化方案是否就此夭折&#xff1f;面对单位严格的IT安全政策&#xff0c;VBA方案常常无法执行。但工作还得继续——1000份学生档案&#xff0c;每份1-5册不等&#xff0c;需要生成符合复杂规则的编号、索引号。本文提供一套…

VHDL课程设计大作业:自动生成状态转移表方法

让状态机设计不再“头大”&#xff1a;一种高效生成VHDL状态转移表的实战方法你有没有在做VHDL课程设计大作业时&#xff0c;对着一张密密麻麻的状态图发愁&#xff1f;明明逻辑想清楚了&#xff0c;可一到写状态转移表就漏条件、跳错状态&#xff1b;改一次需求&#xff0c;整…

时序逻辑电路入门必看:基本概念与工作原理通俗解释

从“记忆”说起&#xff1a;深入理解时序逻辑电路的核心机制你有没有想过&#xff0c;为什么你的手机能记住上一条微信消息&#xff1f;为什么电脑可以一步步执行程序&#xff0c;而不是像计算器一样算完就忘&#xff1f;答案其实藏在一个看似冷门、实则无处不在的技术里——时…

es连接工具在日志分析系统中的核心作用:一文说清

日志系统里的“搬运工”没那么简单&#xff1a;揭秘 es连接工具的实战价值你有没有遇到过这种情况——线上服务突然报错&#xff0c;你急着查日志定位问题&#xff0c;结果发现Kibana里半天刷不出数据&#xff1f;或者好不容易查到了日志&#xff0c;字段全是乱的&#xff0c;s…

第 1 篇:《SpringBoot 启动慢到宕机?阿里 P7 手写的 9 个生产级方案,3 分钟→28 秒(附一键优化插件)》

真实痛点&#xff08;带血泪损失&#xff09;新手&#xff1a;启动慢 调试慢&#xff0c;每天浪费 2 小时&#xff0c;月薪 1 万 每月白扔 2500 块&#xff1b;中级开发&#xff1a;生产扩容时启动超时→熔断降级→订单流失&#xff0c;某生鲜项目因此损失72 万&#xff1b;面…

一文说清vivado安装教程2018全流程及依赖组件

从零开始搭建FPGA开发环境&#xff1a;Vivado 2018.3 安装实战全记录 你是不是也经历过这样的场景&#xff1f;刚拿到一块Zynq开发板&#xff0c;满心欢喜想跑个“Hello World”&#xff0c;结果第一步就被卡在了 安装Vivado 上——界面打不开、驱动装不上、许可证报错……折…

目前国内专注于企业系统集成服务的 AI 智能体有哪些?

过去一年&#xff0c;“AI 智能体” 几乎成了企业数字化领域的高频词。但真正深入到企业内部去看&#xff0c;会发现一个明显分化&#xff1a;很多智能体更像个人效率工具&#xff0c;适合写内容、查资料、做总结&#xff0c;却很难在企业真实业务中长期承担责任 —— 它们无法…

零基础小白指南:轻松搞定Intel HAXM配置

零基础也能搞定&#xff1a;彻底解决 Android 模拟器卡顿问题&#xff0c;让 AVD 飞起来&#xff01; 你是不是也遇到过这种情况&#xff1f;兴冲冲打开 Android Studio&#xff0c;新建一个 AVD&#xff08;Android Virtual Device&#xff09;&#xff0c;点击运行——结果弹…