当前位置: 首页 > news >正文

从C语言到C++:面向对象三大特性之封装

c语言相信大家都学习过了,c++大家肯定也听说过,c++是相较于c语言复杂很多的一门语言,有些时候,我们工作在某些特定领域并不需要掌握c++的所有内容,只需要掌握c++的最基础特性和一些我们可能在自己领域用到的专属特性即可。 对于有c语言基础的同学,我们过度到c++是要稍微容易一些的,c++相较于c的最大的特定就是,c语言是面向过程的语言,而c++是**面向对象的语言,**所以我们这篇文章先来介绍c++最重要的特性:c++面向对象的三大特性。

1 小过度

c语言和c++在语法上稍有不同,我们来介绍一下最简单的区别,方便我们后续可以看懂代码。

这是c语言的打印出helloworld;

#include <stdio.h> int main() { printf("hello world"); return 0; }

这是c++下的打印helloworld:

#include <iostream> int main() { std::cout<<"hello world"<<std::endl; }

区别在于,我们在c中include 的标准库叫做stdio.h,c++中叫做iostream,其次C++标准库都放在⼀个叫std(standard)的命名空间namespace中,所以我们使用其中的方法要在前面加上std::,代码中即std::cout,std::endl,都属于标准库的命名空间中,除此之外,为了简化写法,我们可以声明命名空间namespace以省略掉std::

#include <iostream> using namespace std; int main() { cout<<"hello world"<<endl; }

下面我们将介绍c++面向对象的三大特性:封装,继承,多态

2 封装

2.1 类与对象

首先我们要先介绍面向对象是什么概念,是 C++ 面向对象编程的基础,它可以看作是一种自定义的数据类型,是对具有相同属性和行为的事物的抽象描述。类中可以有变量,也可以有函数。

对象是类的实例化,是根据类的定义创建出来的具体实体。
#incldue <iostream> using namespace std; class Person() { public: int a; void sayhi() { cout<<"hi"<<endl; } }; int main() { Person xx; xx.sayhi(); return 0; }

如代码所示,Person就是我们创建的一个类,里面既有变量,又有函数,而xx就是我们创造出的对象。

2.2 权限

在 C++ 中,类的成员可以有不同的访问权限,包括public,private和protected,public成员在类的外部可以直接访问,private和protected在类外不能访问,private和protected只有在涉及继承的时候才有区别。

下面我们举一个例子,b站黑马程序员的例子,举得非常好,大家可以去看原视频:

在示例中,假设我们打造一款游戏,创建了Wukong这个类,我们将其实例化(玩家注册账号选择角色为wk1)得到对象wk1;接下来我们看一下类中的权限,首先是public权限,我们知道public权限是类内类外都可以访问的,其实当public不存在就好,id与name都在public中,所以可以直接在类外设置两个变量的值,包括sayhi()函数,也可以随意调用;但是我们看private权限下,存着一个成员(变量)money,很明显,作为玩家,我们不能随意设置自己的money,private下的add_money()函数也不能随意调用,由上述介绍可以知道,虽然外部不能调用money,但类内可以调用,所以我们想改变money的值,可以在类内改变,即我们public中的fight(),我们可以在类外调用fight(),因为他属于public权限,故而可以改变money的值。

2.3 构造函数与析构函数

构造函数用于对象的初始化,析构函数用于对象(销毁前)的清理,函数特点:

  1. 两个函数会被编译器自动调用,无需手动;
  2. 可以自己构造两个函数,如果不构造,编译器提供两个空函数,意思是不管怎样,都会执行这两个函数;
  3. 构造函数名称与类名一样,析构函数在类名前面加~;

构造函数:对象创建时自动调用的函数,用来初始化对象,构造函数与析构函数都是默认在类中的,只是不显示出来;

构造函数的特点:

  • 名字必须和类名一样

  • 没有返回值(连void都不能写)

  • 可以重载(多个构造函数)

构造函数分类,可以分为:

构造函数的分类:

(1)普通构造函数

(2)带参构造函数

(3)拷贝构造函数

class Person { public: Person() { // 默认构造函数 age = 0; } Person(int a) { // 有参构造 age = a; } int age; };

如代码所示,其中Person(){age = 0}与Person(int a){age = a}都是构造函数;

默认情况下,c++编译器至少给一个类默认添加三个函数:普通构造函数,拷贝构造函数,析构函数;如果我们自己写了一个普通构造函数,那么类中存在普通构造函数,拷贝构造函数,析构函数,如果我们自己写了拷贝构造函数,那么类中存在拷贝构造函数和析构函数。

析构函数:对象销毁时自动调用的函数,用来释放资源(内存、文件、锁、socket 等)。

调用时机:

  • 栈对象:离开作用域自动调用

  • new出来的对象:delete时调用

  • 全局/静态对象:程序结束时调用

http://www.jsqmd.com/news/520594/

相关文章:

  • OTA-Hub Device Client:轻量级嵌入式固件升级客户端解析
  • LAION CLAP开源大模型部署案例:Streamlit+PyTorch+CUDA一站式音频分析环境搭建
  • flac3d桩低应变检测模拟:桩顶激振与基桩动测
  • GPEN老照片修复全攻略:解决泛黄、模糊、噪点,一键搞定
  • Ostrakon-VL-8B行业落地:药房货架合规检查(处方区隔离/OTC分区/价签强制要求)
  • PDF电子发票识别实战:如何用Python快速解析发票信息(附完整代码)
  • KeyarchOS:国产操作系统的性能革新与生态构建
  • 电子设计新手必看:NPN和PNP三极管到底怎么选?5分钟搞懂电流方向与控制原理
  • ccmusic-database效果展示:交响乐/灵魂乐/独立流行等16类精准识别案例
  • SPDK核心架构深度解析:从轮询模式到消息传递的设计哲学
  • DCDC电源设计:开关频率的权衡艺术与实战选型
  • StructBERT文本相似度模型效果展示:多粒度匹配(词级/短语级/句级)能力分解
  • 实测YOLOv8鹰眼:毫秒级识别80类物体,智能统计看板太实用
  • Qwen2.5-1.5B企业应用案例:HR部门员工政策问答机器人本地化部署纪实
  • Nano-Banana基础教程:Knolling平铺图生成环境部署与调用
  • Z-Image Turbo开源镜像部署教程:CPU Offload+显存碎片整理实操详解
  • 手把手教你用PlantVillage数据集搭建农作物病害识别模型(Python实战)
  • MogFace-large开源模型:CVPR2022录用论文复现与工业级优化对比
  • CLIP-GmP-ViT-L-14图文匹配工具一文详解:logits归一化策略与温度系数影响分析
  • 如何利用RakNet云服务与Rackspace接口构建可扩展的游戏服务器架构
  • 8B小身材大能力:Qwen3-VL-GGUF镜像快速部署与功能实测
  • 2026年口碑好的新媒体图片视频管理系统公司推荐:新媒体图片视频管理系统实力公司推荐 - 品牌宣传支持者
  • 清音刻墨在法律行业落地:庭审录像自动生成带时间戳笔录
  • Youtu-Parsing部署案例:镜像免配置+开机自启,10分钟上线文档智能解析服务
  • MedGemma 1.5在远程医疗中的应用:智能诊断助手实战
  • GLM-4.7-Flash实操手册:Prometheus监控指标接入与性能看板搭建
  • 南方电网电费监控终极指南:5分钟完成Home Assistant智能集成
  • 从硕士论文到量产:AC耦合电容的工业界选型内幕(含16Gbps实测曲线)
  • 通义千问3-Embedding-4B实战应用:代码库语义搜索系统搭建教程
  • 优质芯片展会服务商推荐,专业团队赋能展会落地执行 - 品牌2026