news 2026/7/15 18:47:52

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

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
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; }
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/7/15 8:57:34

机器学习:强化学习算法

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

作者头像 李华
网站建设 2026/7/15 11:16:41

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

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

作者头像 李华
网站建设 2026/7/15 15:30:20

2026.1.9

加密技术PKI&#xff08;公钥基础设施&#xff09;通过使用公钥技术和数字签名来确保信息安全PKI体系能够实现的功能身份验证数据完整性数据机密性操作的不可否认性对称加密&#xff1a;用相同的密钥进行加密和解密。不安全&#xff0c;但处理速度快非对称加密&#xff1a;使用…

作者头像 李华
网站建设 2026/7/14 4:26:35

PyTorch 2.5零基础教程:云端GPU免配置,1小时1块快速上手

PyTorch 2.5零基础教程&#xff1a;云端GPU免配置&#xff0c;1小时1块快速上手 引言&#xff1a;为什么选择云端PyTorch&#xff1f; 作为一名大学生&#xff0c;当你需要完成深度学习课程项目时&#xff0c;最头疼的往往不是算法本身&#xff0c;而是环境配置。传统PyTorch…

作者头像 李华
网站建设 2026/7/14 3:25:09

es客户端工具全文检索图解说明:match与multi_match用法

从零搞懂 Elasticsearch 全文检索&#xff1a;match和multi_match到底怎么用&#xff1f;你有没有遇到过这种情况——用户在搜索框里输入“苹果手机”&#xff0c;结果系统却把卖水果的页面排到了前面&#xff1f;或者搜“自动驾驶特斯拉”时&#xff0c;标题明明写着相关内容的…

作者头像 李华
网站建设 2026/7/14 6:39:50

超详细版AUTOSAR OS任务调度机制:深度剖析原理

深入AUTOSAR OS任务调度&#xff1a;从原理到实战的系统性解析在现代汽车电子控制单元&#xff08;ECU&#xff09;中&#xff0c;一个小小的控制器可能同时运行着数十个任务——从读取传感器信号、执行发动机喷油逻辑&#xff0c;到处理CAN通信、响应紧急制动请求。这些任务必…

作者头像 李华