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

类和对象(1)--《Hello C++ Wrold!》(3)--(C/C++)

文章目录

  • 前言
  • 面向过程和面向对象的初步认识
  • 类的引入
  • 类的定义
  • 类的访问限定符及封装:
    • 封装
  • 类的作用域
  • 类的实例化

前言

这期的话会讲解关于对象的一些基础知识,包括:面向过程和面向对象的初步认识,类的引入,类的定义,类的访问限定符及封装,类的作用域,类的实例化。

面向过程和面向对象的初步认识

面向过程注重的是求解问题的步骤

面向对象注重的是每个对象之间的交互(也就是每个人应该干什么)

拿外卖举例:
面向过程就是下单->制作->配送->接收
面向对象就是->顾客下单,之后接收外卖 商家接受顾客的订单,制作,做完给骑手 骑手从商家那里拿到外卖,送给顾客

类的引入

类可以看作是一种结构体,比C语言里面的结构体多了里面可以有成员函数

但是C++在用类的时候,一般喜欢用class

C++兼顾c语言,struct以前的用法都可以继续用

举例:C++在定义时一般省略struct,但是加上也可以:
eg: struct List st1;

类的定义

类的定义跟C语言里面的结构的差不多

形如eg:
class list
{ 
};

只是里面的成员可以是成员函数,也可以是成员变量

注意:可以先写成员函数(里面有成员变量的使用也行),再写成员被变量,也可以穿插着写

各部分的称呼:

class为定义类的关键字,list为类的名字,{}中为类的主体,注意类定义结束时后面分

号不能省略。

类体中内容称为类的成员:类中的变量称为类的属性或成员变量; 类中的函数称为类的方法或者

成员函数。

类有两种定义方式:(常用第二种)

1.定义和声明都在类里面(在类里面定义的函数如果符合内联函数条件的话,会自动成内联函数)

2.声明在类里面,定义在类外面(一般是类声明放在.h文件中,成员函数定义放在.cpp文件中)

注意:在类外定义的时候,要记得在成员前面加::(其实也就成员函数的定义要用:: ) (::是域作用限定符)

eg:void list::Init()
{}
不要跟类对象的使用搞混了(一般用.(不是指针时)比如:st1.a)

注意:1.在公司里面,类的成员变量一般会在前面或者后面加个_(自己习惯前面加_)和其他变量区分:来防止这种情况的出现:在这里插入图片描述

变量的声明和定义的评判标准和函数是不一样的:
变量的声明:没有开辟空间的就算变量的声明(比如类的定义里面的 int a;(因为定义类时没有开辟空间))
变量的定义:开辟了空间的 比如:main函数里面 int a;这样

类的访问限定符及封装:

类的访问限定符有:public(公有–里面的是公有成员),protected(保护–里面的是保护成语),private(私有–里面的是私有成员)

1.如果后面没有访问限定符,作用域就到 } 即类结束

eg:class list
{
public:
//这里面的就是public的,不用加大括号
eg: int a;int b;private:
};

2.class的默认访问权限为private,struct为public(因为struct要兼容C语言)

3.public部分可以在类外访问,protected和private不行(这后两个在继承那才会有区别)

注意:访问限定符只在编译时有用,当数据映射到内存后,没有任何访问限定符上的区别

封装

封装本质上是一种管理,让用户更方便使用类,也让用户不能访问不该访问的内部东西(比如private里的)–比如自己建立的栈,有些人在使用时要自己求,就不让他求,保持格式统一

类的作用域

C++中的四种域:局部域,全局域,命名空间域和类域

编译器在成员函数里面搜索变量时:先局部域,再类域,最后全局域(命名空间域的话要看是在哪展开的)

(解决冲突的办法eg:函数可以用域限定符就可以防止重名但没重载导致的冲突)

局部域和全局域会影响生命周期,类域和命名空间域不会,这俩里面变量的生命周期取决于变量本身的存储形式

类的实例化

类的实例化也就是给类分配空间

eg:已经定义了一个类list int main()
{list st1;//这就算类的实例化return 0;
}

注意区分类的定义,类的声明和类的实例化

类的声明:(其他两个上面都有举例)

eg: class list;
http://www.xdnf.cn/news/5552.html

相关文章:

  • 【Linux笔记】——进程信号的保存
  • 51单片机引脚功能概述
  • 十五、多态与虚函数
  • labview硬件采集
  • 数字人教学技术与产品方案的全面解析
  • 42、在.NET 中能够将⾮静态的⽅法覆写成静态⽅法吗?
  • 本地不安装oracle,还想连oracle
  • c++STL-STL简介和vector的使用
  • ngx_http_keyval_module动态键值管理
  • 基于STM32、HAL库的RN8209C电能计量芯片驱动程序设计
  • 系统架构-嵌入式系统架构
  • AI 搜索引擎 MindSearch
  • 香港维尔利健康科技集团亮相中国资本市场发展年会,被评为“最具投资价值医疗科技企业”
  • 面试题解析 | C++空类的默认成员函数(附生成条件与底层原理)
  • 高吞吐与低延迟的博弈:Kafka与RabbitMQ数据管道实战指南
  • 互联网大厂Java求职面试:优惠券服务架构设计与AI增强实践-1
  • 七、基于HAL库,实现串口+DMA+状态机通信实现
  • 国产化Excel处理控件Spire.XLS系列教程:如何通过 C# 删除 Excel 工作表中的筛选器
  • HTML简单语法标签(后续实操:云备份项目)
  • 《Spring Boot 4.0新特性深度解析》
  • 企业即时通讯软件,私有化安全防泄密
  • 图灵爬虫练习平台第十九题js逆向
  • 使用基于ARM的低功耗微型单板计算机打造智能家居管理系统中枢
  • 开发环境(Development Environment)
  • 前端面试每日三题 - Day 32
  • Kubernetes控制平面组件:Kubelet详解(二):核心功能层
  • Go语言:json 作用和语法
  • 【WPF】Opacity 属性的使用
  • 【Redis 进阶】哨兵模式
  • 降低60.6%碰撞率!复旦大学地平线CorDriver:首次引入「走廊」增强端到端自动驾驶安全性