C++初阶学习第三弹——类与对象(上)

目录

一.初步认知对象

 二.类的基本组成、

1.类的定义

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

3.类的作用域

4、类的大小的计算

5.this指针

三.总结


一.初步认知对象

C语言是面向过程的,关注的是过程,分析出求解问题的步骤,通过函数调用逐步解决问题。

而C++是基于面向对象的,关注的是对象,将一件事情拆分成不同的对象,靠对象之间的交互完成。

 二.类的基本组成、

1.类的定义

class A    
{
public:void Init(int year){_year=year;}
private:int _year;int* arr;};

 class是定义类的关键字,  其中A是类的名字,class{}中的是类的主体。

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

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

2. 类声明放在.h文件中,成员函数定义放在.cpp文件中,注意:成员函数名前需要加类名:

 

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

1. public修饰的成员在类外可以直接被访问

2. protected和private修饰的成员在类外不能直接被访问(此处protected和private是类似的)

3. 访问权限作用域从该访问限定符出现的位置开始直到下一个访问限定符出现时为止

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

5. class的默认访问权限为private

3.类的作用域

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

class Person
{
public:void PrintPersonInfo();
private:char _name[20];char _gender[3];
};void Person::PrintPersonInfo()
{cout << _name << " "<< _gender << " " << _age << endl;
}

 这里需要指定PrintPersonInfo是属于Person这个类域

4、类的大小的计算

class A
{
public:void PrintA(){cout << _a << endl;}
private:int _a;};
int main()
{cout << sizeof(A) << endl;return 0;
}

 类在计算大小的时候,是不计算函数大小的

一个类的大小,实际就是该类中”成员变量”之和,当然要注意内存对齐。

5.this指针

class Date
{ 
public:void Init(int year, int month, int day){_year = year;_month = month;_day = day;}void Print(){cout <<_year<< "-" <<_month << "-"<< _day <<endl;}private:int _year;     // 年int _month;    // 月int _day;      // 日
};
int main()
{Date d1;d1.Init(2022,1,11);d1>printf();return 0;
}

以上代码printf()按理来说应该有一个形参,可是实际却没有,因为类成员函数参数中是有一个默认的this指针表示创建的类变量的地址

以上代码实际是这样。

class Date
{ 
public:void Init(int year, int month, int day){_year = year;_month = month;_day = day;}void Print(Date* this){cout <<this->_year<< "-" <<this->_month << "-"<<this-> _day <<endl;}private:int _year;     // 年int _month;    // 月int _day;      // 日
};
int main()
{Date d1;d1.Init(2022,1,11);d1>printf();return 0;
}

三.总结

希望给大家带来一定的帮助,下节我会接着讲解关于类和对象—中阶的内容

感谢大佬们的支持。

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

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

相关文章

WPF脱机应用:实现拼音模糊搜索的AutoCompleteBox

引言 在用户界面设计中&#xff0c;提供快速且直观的搜索体验是提升应用可用性的关键。WPF&#xff08;Windows Presentation Foundation&#xff09;提供了丰富的控件&#xff0c;其中AutoCompleteBox是一个能够辅助用户输入并提供自动完成建议的控件。然而&#xff0c;在脱机…

Linux下普通用户无法执行sudo指令

当执行sudo指令时出现&#xff1a; xxx&#xff08;普通用户名字&#xff09; is not in the sudoers file 说明在/etc/sudoers文件中没有把xxx加入到可执行sudo指令的名单中&#xff0c;因此需要修改sudoers文件。 解决方法&#xff1a;1、vim /etc/sudoers &#xff08;要…

Java类加载器实现机制详细笔记

1. 类加载器的基本概念 类加载器&#xff08;ClassLoader&#xff09;&#xff1a;在Java中&#xff0c;类加载器负责将Java类动态加载到JVM中。它是实现动态类加载机制的核心组件&#xff0c;对于开发复杂应用程序&#xff08;如插件系统、模块化设计等&#xff09;至关重要。…

什么是hdfs如何使用驱动程序访问hdfs

目录 什么是hdfs 主要特点包括&#xff1a; 架构组成&#xff1a; 应用场景&#xff1a; 如何使用驱动程序访问hdfs 准备工作环境&#xff1a; 启动 Hadoop 服务 可能遇到的问题&#xff1a; ssh验证失败 验证Hadoop服务 对hdfs进行文件操作 什么是hdfs HDFS&#x…

vite5+vue3开发阅读APP实战笔记20240725

目前界面长成这样&#xff1a; 配置别名 修改vite.config.js import {defineConfig} from vite import vue from vitejs/plugin-vue import path from "path"// https://vitejs.dev/config/ export default defineConfig({server: {open: true,port: 8088,},plug…

论文阅读【检测】:商汤 ICLR2021 | Deformable DETR

文章目录 论文地址AbstractMotivation技术细节多尺度backbone特征MSDeformAttention 小结 论文地址 Deformable DETR 推荐视频&#xff1a;bilibili Abstract DETR消除对目标检测中许多手工设计的组件的需求&#xff0c;同时表现出良好的性能。然而&#xff0c;由于Transfor…

MongoDB - 聚合阶段 $count、$skip、$project

文章目录 1. $count 聚合阶段2. $skip 聚合阶段3. $project 聚合阶段1. 包含指定字段2. 排除_id字段3. 排除指定字段4. 不能同时指定包含字段和排除字段5. 排除嵌入式文档中的指定字段6. 包含嵌入式文档中的指定字段7. 添加新字段8. 重命名字段 1. $count 聚合阶段 计算匹配到…

Odoo 17 仪表盘开发指南:打造高效的数据可视化中心

在现代企业管理中,数据驱动的决策至关重要。Odoo 17 提供了强大的平台来构建自定义仪表板, 适用于数据统计、工作台、驾驶舱、数据可视化等场景,以便用户能够一目了然地监控关键指标并做出及时反应。本文将介绍如何在 Odoo 17 中开发一个灵活且高度定制化的仪表盘系统,包括…

12_TypeScript 模块 以及 模块化封装DB 库

TypeScript 模块 1、模块中暴露方法12、模块中暴露方法23、模块中暴露方法34、封装[上一节的db 库](https://blog.csdn.net/qq_46143850/article/details/140664100)5、TypeScript 命名空间 模块的概念&#xff08;官方&#xff09;&#xff1a; 关于术语的一点说明&#xff1a…

TCP Nagle算法,TCP_CORK,延迟确认机制简单介绍

Nagle Nagle算法是一种改善TCP/IP网络效率的算法。 算法的目的 主要目的是减少网络中小数据包的数量,从而减少网络拥塞。它通过延迟发送小数据包来实现这一目标,直到有足够的数据可以发送一个完整的数据包。 工作原理 如果要发送的数据量达到了最大分段大小(Maximum Segmen…

Android笔试面试题AI答之Android系统与综合类(1)

答案仅供参考&#xff0c;来着文心一言、Kimi.ai 目录 1.简述嵌入式实时操作系统&#xff0c;Android 操作系统属于实时操作系统吗?嵌入式实时操作系统简述Android操作系统是否属于实时操作系统 2.简述Android系统的优势和不足&#xff1f;3.简述Android的系统架构 &#xff1…

实战深度学习--进行蘑菇分类

数据集&#xff1a;https://pan.quark.cn/s/4d3526600c0c 概述 本笔记将介绍如何使用Python和深度学习库&#xff08;如TensorFlow和Keras&#xff09;来构建一个卷积神经网络&#xff08;CNN&#xff09;模型&#xff0c;以区分可食用和有毒的蘑菇。我们将从数据准备、模型构…

Vue.js 与 Ajax(vue-resource)的集成应用

Vue.js 与 Ajax&#xff08;vue-resource&#xff09;的集成应用 Vue.js 是一款流行的前端JavaScript框架&#xff0c;以其简洁、灵活和高效的特点而受到开发者的喜爱。在实际开发中&#xff0c;与后端服务的通信是不可或缺的&#xff0c;而Ajax技术是实现这一功能的关键。在V…

C语言 -- 动态内存管理

C语言 -- 动态内存管理 1. 为什么要有动态内存分配2. malloc 和 free2.1 malloc2.2 free 3. calloc 和 realloc3.1 calloc3.2 realloc 4. 常见的动态内存的错误4.1 对NULL指针的解引用操作4.2 对动态开辟空间的越界访问4.3 对非动态开辟内存使用free释放4.4 使用free释放一块动…

【力扣】SQL题库练习5

高级查询和连接 1341.电影评分 表&#xff1a;Movies ------------------------ | Column Name | Type | ------------------------ | movie_id | int | | title | varchar | ------------------------ movie_id 是这个表的主键(具有唯一值的列)。 ti…

力扣131题:分割回文串的 Java 实现

引言 力扣&#xff08;LeetCode&#xff09;是一个在线编程平台&#xff0c;提供了大量的编程题目供开发者练习。第131题“分割回文串”是一个有趣的字符串处理问题&#xff0c;要求将一个字符串分割成尽可能多的回文子串。本文将介绍如何使用 Java 解决这个问题。 题目描述 …

05 capture软件创建元器件库(以STM32为例)

05 创建元器件库_以STM32为例 一、新建原理图库文件二、新建器件三、开始创建元器件 一些IC类元件&#xff0c;需要自己创建元器件库。 先看视频&#xff0c;然后自己创建STM32F103C8T6的LQFP48的元器件。 STM32F103C8T6是目前为止&#xff0c;自己用的最多的芯片。 先要有数据…

mysqlMHA

mysqlMHA 什么是MHA ​ 高可用模式下的故障切换,基于主从复制. ​ 至少需要3台 ​ 故障切换过程在0-30秒之内. ​ 这过程和keepalive比较像,也是通过vip地址,根据vip地址所在的主机,确定主备. ​ 主和备不是靠优先级确定的,主从复制的时候就确定了主,备是在MHA的过程中确…

Qt自定义MessageToast

效果&#xff1a; 文字长度自适应&#xff0c;自动居中到parent&#xff0c;会透明渐变消失。 CustomToast::MessageToast(QS("最多添加50张图片"),this);1. CustomToast.h #pragma once#include <QFrame>class CustomToast : public QFrame {Q_OBJECT pub…

【学习笔记】解决Serial Communication Library编译问题

【学习笔记】解决编译 Serial Communication Library 时的 Catkin 依赖问题 Serial Communication Library 是一个用 C 编写的用于连接类似 rs-232 串口的跨平台库。它提供了一个现代的 C 接口&#xff0c;它的工作流程设计在外观和感觉上与 PySerial 相似&#xff0c;但串口速…