C++ (类的设计,对象的创建,this指针,构造函数)

类的设计

C++对结构体是有增强的

可以包含函数作为结构体成员

可以直接定义变量

在结构体成员函数里面可以直接访问结构体成员变量

struct student{string name;int age;float score;void play_game(const string &name);}void student::play_game(const string game){}int main(){}

在C++,如果一个类的成员被声明为私有,那么它只能被该类内部的成员函数,友元函数或友元类访问,如果成员不加修饰符则默认为私有

class 类名称{public:private:protected:}

成员函数:在类中说明函数原型,并在函数名前使用类名::加以限定

也可以直接在类中给出函数体,形成内联函数

允许声明重载函数和带默认参数的函数

protect(保护成员):只能被该类的成员函数和其派生类的成员函数访问

struct和class的区别:

主要体现在默认访问权限上,struct的成员默认为public,class成员默认为private

对象的创建

对象本质上是一块内存,这块内存中存放的是创建这个对象的类描述的数据

在函数内部,用类创建一个对象,这个对象就是栈上创建的对象

int main(){Student stu;return 0;    }

在函数调用结束时栈上分配的内存会自动释放,这个对象也就销毁了

使用new'运算符可以在堆区开辟空间

在堆区开辟的空间,只需要把起始地址传过来就可以

Student * pstu = new Student; //因为Student 的类型是Student ,所以 pstu的类型为 Student*.....delete pstu;

this指针

this是一个特殊的指针,指向类对象自身的首地址

每个类对象的非静态成员函数都有一个this指针,指向调用成员函数对象的首地址

如果在成员函数中需要引用整个对象则用*this  解引用

当成员函数的参数与成员变量同名时,可使用this区分

构造函数

作用 :给对象进行初始化

特征:名称与类的名称相同,且没有返回值

class Student(){string name;float score;char gender;Student(string name,float score,char gender){this->name = name;//this是一个指针this->score = score;this->gender = gender;}}int main(){Student stu("小红",88,'M');    }

如果没写构造函数,系统会默认提供一个无参的构造函数

函数名相同,参数不同,叫做函数的重载


class Student(){string name;float score;char gender;Student(string name,float score,char gender){this->name = name;//this是一个指针this->score = score;this->gender = gender;}Student(){}}int main(){Student stu;//调用的是无参的构造函数Student stu(name,score,gender);//调用的是有参的构造函数}

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

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

相关文章

《ADVANCING MATHEMATICAL REASONING IN LAN- GUAGE MODELS》全文阅读

《ADVANCING MATHEMATICAL REASONING IN LAN- GUAGE MODELS: THE IMPACT OF PROBLEM-SOLVING DATA, DATA SYNTHESIS METHODS, AND TRAINING STAGES》全文阅读 提升语言模型中的数学推理能力:问题求解数据、数据合成方法及训练阶段的影响 \begin{abstract} 数学推…

网络测试工具:涵盖网络测速、密码查看、故障判断与网络监测

在网络管理与维护的广阔领域中,网络测试工具扮演着至关重要的角色。它们不仅简化了复杂的网络诊断流程,还提升了工作效率。今天推荐一款包含功能全面的网络测试工具:InetTest,是一款免费且开源的网络测试工具,适用于Wi…

小刚说C语言刷题——1005 - 已知一个圆的半径,求解该圆的面积和周长

1.题目描述 已知一个圆的半径,求解该圆的面积和周长。 输入 输入只有一行,只有 1个整数。 输出 输出只有两行,一行面积,一行周长。(保留两位小数)。 令 pi3.1415926。 样例 输入 1 输出 3.14 6.…

【算法】快速排序

算法系列六:快速排序 一、快速排序的递归探寻 1.思路 2.书写 3.搭建 3.1设计过掉不符情况(在最底层时) 3.2查验能实现基础结果(在最底层往上点时) 3.3跳转结果继续往上回搭 4.实质 二、快速排序里的基准排序 …

SoapUI 4.6.4(32位)下载安装教程 - 兼容老旧Windows系统

SoapUI 4.6.4(32位版) 是个老版本的测试工具,专门给 32位 Windows 电脑 用的。现在最新版都是 64 位的了,但如果你还在用老系统,可能还得找这个旧版。 SoapUI 4.6.4工具下载:https://pan.quark.cn/s/c07381db8102 这…

【AI量化第24篇】KhQuant 策略框架深度解析:让策略开发回归本质——基于miniQMT的量化交易回测系统开发实记

我是Mr.看海,我在尝试用信号处理的知识积累和思考方式做量化交易,应用深度学习和AI实现股票自动交易,目的是实现财务自由~ 目前我正在开发基于miniQMT的量化交易系统——看海量化交易系统。 本篇要讲到量化的核心了——策略。说白了每个投资者…

Java面试黄金宝典48

1. C++ 的拷贝构造函数,深拷贝和浅拷贝 定义 拷贝构造函数:在 C++ 里,拷贝构造函数属于特殊的构造函数,其功能是使用一个已存在的对象来初始化一个新对象。当对象以值传递的方式作为参数传给函数、函数返回对象、用一个对象初始化另一个对象时,拷贝构造函数会被调用。浅拷…

OpenCV学习之获取图像所有点的坐标位置(二)

1.功能介绍 (1)使用openCV解析了.jpeg、.jpg、.png格式的图像文件,输出了图像的宽、高、通道数; (2)创建txt格式文件,保存图像中各像素点的rgba值。 2.环境介绍 操作系统:window10 开发语言:visual studio 2015 c++ 3.功能实现过程 3.1环境设置 (1)打开Vs2015…

B2B2C多用户商城平台 的两种创新玩法

以前随便搞个淘宝京东那样的商城就能躺着赚钱的日子早过去了!现在市面上各种电商玩法花样百出:小红书那种刷着刷着就下单的"种草"电商,拼多多那种"帮我砍一刀"的社交电商,还有抖音快手那种看着视频突然就想买…

【Bluedroid】A2DP Sink播放流程源码分析(二)

接上一篇继续分析:【Bluedroid】A2DP Sink播放流程源码分析(一)_安卓a2dp sink播放流程-CSDN博客 AVDTP接收端(Sink)流事件处理 bta_av_sink_data_cback 是 Bluedroid 中 A2DP Sink 角色的 AVDTP 数据回调函数,负责处理接收端的…

抗量子算法验证工具

抗量子算法计算工具 抗量子算法验证工具ML-KEMML-DSASLH-DSA 抗量子算法验证工具 2024年末,美国NIST陆续公布了FIPS-203、FIPS-204、FIPS-205算法标准文档,抽空学习了一下,做了个算法计算工具。 ML-KEM ML-DSA SLH-DSA 需要的朋友可留言交流…

2025年PMP考试有哪些变化?难点在哪里?

PMP(项目管理专业人士资格认证)考试因其广泛的行业认可度和实用性,成为许多专业人士提升职业竞争力的重要选择。然而,对于初次接触PMP考试的考生来说,其广度与深度的平衡、理论与实践的结合,以及跨文化思维…

Docker学习笔记-docker安装、删除

一、在centOS 7中docker的默认安装目录 # Docker 主配置文件目录 ls /etc/docker# Docker 数据目录(镜像、容器、卷等) ls /var/lib/docker# Docker 可执行文件路径 which docker # 输出类似 /usr/bin/docker 二、docker文件目录说明 目录/文件用途/…

MATLAB求和∑怎么用?

MATLAB求和∑怎么用? 一:题目:求下列方程的和 二、代码如下 1.syms函数 (方法一) 代码如下(示例): 1. syms x 2. symsum((x.^22*x).^3,1,100) 3. 2.直接用循环 (方法二) 代码如下&am…

每日算法-链表(2.两数相加、24.两两交换链表中的节点、143.重排链表)

一.两数相加 1.1题目描述 1.2题解思路 定义两个指针l1,l2依次遍历两个链表,用变量add存储l1加l2的值,将add的个位数取出来充当新节点的值,然后将add的个位数删去,即add /10,循环此操作。 重点分析: 1.跟…

Flutter学习 滚动组件(1):ListView基本使用

目录 一、ListView构造方法1.1 常规方法1.2 ListView.builder1.3 ListView.separated 二、自定义ListView样式和布局:三、ListView性能优化:总结: 一、ListView构造方法 主要以下几种方法: 常规方法,直接使用默认的构…

ESLint常见错误

1、Strings must use singlequote —— 字符串必须使用单引号 2、Extra semicolon semi——额外的分号:一行语句结尾不能添加分号 3、Unexpected trailing comma —— 行尾多了一个逗号 4、Newline required at end of file but not found ——文件结尾必须要新加…

Windows进行磁盘分区/扩容

Windows进行磁盘分区/扩容 导航 文章目录 Windows进行磁盘分区/扩容导航分区教程压缩卷教程 用Windows自带的磁盘管理进行分区/扩容,但有个东西需要说明下是: 物理特性限制 磁盘分区的物理特性决定了扩容操作的方向。在磁盘上,数据是线性存储…

获取类路径

分析 String pathThread.currentThread().getContextClassLoader().getResource("log").getPath(); 这行代码用于获取类路径(classpath)下名为"log"的资源的文件系统路径,我来详细解析它的执行过程和潜在问题: 1. 代码分解解析 j…

安装fvm可以让电脑同时管理多个版本的flutter、flutter常用命令、vscode连接模拟器

打开 PowerShellfvm安装 dart pub global activate fvm安装完成后,如果显示FVM无法识别,那么需要去添加环境变量path添加这个:C:\Users\Administrator\AppData\Local\Pub\Cache\bin 常用命令 fvm releases 查看用户可以装的flutter版本fvm l…