【25.6】C++智能交友系统

常见错误总结

const-1

如下代码会报错

原因如下:

man是一个const修饰的对象,即man不能修改任何内容,但是man所调用的play函数只是一个普通的函数,所以出现了报错。我们需要在play函数中加上const修饰,或者删除man对象的const修饰,报错即可解除。

修改后的代码如下:

class Man {
public:Man() {}void play() const{cout << "I am playing ...." << std::endl;}
};int main(void) {const Man man;man.play();
}

 这里给出一种修改方式,另一种大家可以自行尝试修改。

总结:

报错:

error C2662: “void Man::play(void)”: 不能将“this”指针从“const Man”转换为“Man &”

原因:

man是const对象, 但是却调用了非const方法.

解决方案:
方案1:

把 const Man man; 修改为: Man man;

方案2:

把play方法, 修改为 const方法.

 

const-2

如下代码会报错

报错原因:

man对象被const修饰,而test函数所需要传入的对象是普通对象,而不是const修饰的对象

下面我们将test函数所需对象修改成用const修饰的对象

 如图所示,如果test所需的对象变成const修饰的对象,但是test函数中调用的函数是普通函数,也会报错,我们需要将play函数也用const修饰即可解除报错。

如果我们将man对象前面的const修饰删掉,则也不会报错

 

说明const修饰的对象可以传入普通对象,并且普通对象也可以调用用const修饰的函数

总结:

原因: 非const引用,  不能对const变量进行引用

注意: const引用, 可以对非const变量进行引用

 

解决方案:

修改引用变量, 或者被引用的变量

static

 错误代码如下

原因:

类的静态方法(static方法) 内, 不能访问实例方法(非static方法)和实例数据成员(非static数据成员).

 

由上面两段代码可以看出 getCount函数是一个静态方法,如果在这个方法中调用了非静态的函数或者是非静态的变量,就会报错。

因此可知,类的静态方法(static方法) 内, 不能访问实例方法(非static方法)和实例数据成员(非static数据成员).

vector

代码如下

class Man {
public:Man() {}void play() {count += 10;cout << "I am playing ...." << std::endl;}int getDrinkCount() const {return count;}
private:int count = 0; //一共喝了多少杯酒
};int main(void) {Man zhangFei, guanYu, liuBei;vector<Man> men;// push_back是把参数的值,拷贝给vector// men[0]的值和liubBei是相同的,但是,是两个不同的对象men.push_back(liuBei);men.push_back(guanYu);men.push_back(zhangFei);men[0].play();cout << men[0].getDrinkCount() << endl; //10cout << liuBei.getDrinkCount() << endl;  //0system("pause");return 0;
}

 上段代码的运行结果如下图所示

 根据上面的运行结果我们可以看出,liubei对象和men[0]对象的count变量值是不同的,因此可以知道,这是两个对象。

因此,vector加入的成员是拷贝新成员,只是刚开始的时候两个对象的值相同,但终究是两个对象,后续对其中一个对象的值进行修改,另一个对象的值不会改变。

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

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

相关文章

创建一个Java项目在IntelliJ IDEA中

创建一个Java项目在IntelliJ IDEA中是一个直观且功能强大的过程&#xff0c;适合从初学者到经验丰富的开发者。IntelliJ IDEA由JetBrains开发&#xff0c;被誉为Java开发领域最受欢迎的IDE&#xff08;集成开发环境&#xff09;之一&#xff0c;它提供了代码自动补全、版本控制…

【计算机网络 - 基础问题】每日 3 题(十八)

✍个人博客&#xff1a;Pandaconda-CSDN博客 &#x1f4e3;专栏地址&#xff1a;http://t.csdnimg.cn/fYaBd &#x1f4da;专栏简介&#xff1a;在这个专栏中&#xff0c;我将会分享 C 面试中常见的面试题给大家~ ❤️如果有收获的话&#xff0c;欢迎点赞&#x1f44d;收藏&…

SpringBoot环境配置(Spring Boot Profile)

一、介绍 在Spring Boot中&#xff0c;spring.profiles 配置用于定义不同环境下的配置文件。这使得应用可以在不同的环境中使用不同的配置&#xff0c;比如开发环境、测试环境和生产环境等。这种方式可以避免在代码中硬编码配置信息&#xff0c;并且能够更灵活地管理应用的环境…

SpringBootWeb增删改查入门案例

前言 为了快速入门一个SpringBootWeb项目&#xff0c;这里就将基础的增删改查的案例进行总结&#xff0c;作为对SpringBootMybatis的基础用法的一个巩固。 准备工作 需求说明 对员工表进行增删改查操作环境搭建 准备数据表 -- 员工管理(带约束) create table emp (id int …

计算机毕业设计公交站点线路查询网站登录注册搜索站点线路车次/springboot/javaWEB/J2EE/MYSQL数据库/vue前后分离小程序

选题背景‌&#xff1a; 随着城市化进程的加快&#xff0c;公共交通成为城市居民出行的重要方式。然而&#xff0c;传统的公交站点线路查询方式往往依赖于纸质地图或简单的电子显示屏&#xff0c;查询效率低下且信息更新不及时。因此&#xff0c;开发一个功能全面、易于使用的…

OpenMV学习第一步安装IDE_2024.09.20

用360浏览器访问星瞳科技官网&#xff0c;一直提示访问不了。后面换了IE浏览器就可以访问。第一个坑。

互联网技术的持续演进:从现在到未来

互联网技术的持续演进&#xff1a;从现在到未来 在过去的十年里&#xff0c;互联网技术发生了飞速变化。无论是大数据、人工智能&#xff0c;还是5G网络和物联网&#xff0c;每一种技术的突破都在改变我们的生活方式和工作模式。作为现代社会的核心驱动力&#xff0c;互联网技…

Qwen2-VL的微调及量化

一、Qwen2-VL简介 Qwen2-VL是Qwen-VL的升级版本&#xff0c;能力更强&#xff0c;性能全面提升。尤其是72B参数的版本更是取了惊人的成绩。它可以读懂不同分辨率和不同长宽比的图片&#xff0c;在 MathVista、DocVQA、RealWorldQA、MTVQA 等基准测试创下全球领先的表现&#xf…

基于springboot的智慧社区微信小程序

文未可获取一份本项目的java源码和数据库参考。 本课题研究目标 本文主要对小区生活服务平台的功能和非功能需求进行了分析&#xff0c;系统除了提供物业保修、小区资讯、投诉留言、常用电话等基础功能外&#xff0c;为了满足用户的多样化需求&#xff0c;还提供邻里圈子和有…

238 除自身以外数组的乘积

解题思路&#xff1a; \qquad 这道题要求在 O ( n ) O(n) O(n) 时间内解决&#xff0c;但是不能使用除法。仅使用乘法的话&#xff0c;看上去很难在一次遍历中得出想要的结果&#xff0c;但是没关系&#xff0c;一次遍历不行的话那就试试两次、三次&#xff0c;重要的是分析在…

Python--TCP/UDP通信

文章目录 前言一、pandas是什么&#xff1f;二、使用步骤 1.引入库2.读入数据总结 一.客户端与服务端通信原理 1. 服务器端 服务器端的主要任务是监听来自客户端的连接请求&#xff0c;并与之建立连接&#xff0c;然后接收和发送数据。 创建套接字&#xff1a;首先&#xff0…

从零开始学习Linux(13)---多线程

目录 1.线程 1.线程的概念 2.线程的理解&#xff08;Linux系统为例&#xff09;---一般系统 3.进程vs线程 4.线程的控制 5.线程的等待 6.线程的终止 7.线程的分离 2.线程的互斥 1.互斥锁 2.条件变量 3.生产消费模型 4.阻塞队列 5.信号量 6.唤醒队列 1.线程 1.线…

【数据库】常用数据库简介

目录 &#x1f354; 常用的关系型数据库 &#x1f354; Mysql简介 &#x1f354; SQL 简介 SQL语句的分类 SQL 写法 SQL 常用的数据类型 &#x1f354; DDL语句 对数据库的操作 对数据表的操作 &#x1f354; DML语句 插入数据 insert into 修改数据 update 删除数…

css基础知识笔记

一言&#xff1a; “放任误解就是撒谎。” 文章目录 前言文章有误敬请斧正 不胜感恩&#xff01;CSS基础教程0.文本样式基础1. CSS选择器2. CSS布局技巧3. 响应式设计4. Emmet语法 总结 前言 写在开始&#xff1a; 今天来看一眼CSS基础知识。 好几天没更新了 先更一篇 文章有…

C++如何进阶? -- 整理一些学习资料

在学习完C最基础的知识后&#xff0c;需要对C有更近一步的认知&#xff0c;才能在实际编程中写出更高效更清晰的代码。 看门见山&#xff0c;首先贴出学习资料&#xff1a; 书籍&#xff1a; STL源码剖析(必看)Effective C(必看)More Effective C(选看)深度探索C对象模型(选…

Java操控Redis (面经之 使用Redis)

操控Redis的工具 ReactiveRedisTemplate 和 RedisTemplate : RedisTemplate&#xff1a; 它是一个通用的模板类&#xff0c;可以使用任何序列化策略来序列化和反序列化键和值。默认情况下&#xff0c;它使用 JdkSerializationRedisSerializer 序列化值&#xff0c;并使用 Strin…

DataGrip在Windows和MacOS平台上的快捷键

0. 背景信息 No.说明1测试DataGrip版本号 : 2024.2.2 1. Windows下快捷键 2. MacOS下快捷键

【Kubernetes】常见面试题汇总(二十三)

目录 69.考虑一家拥有分布式系统的跨国公司&#xff0c;拥有大量数据中心&#xff0c;虚拟机和许多从事各种任务的员工。您认为这样公司如何以与 Kubernetes 一致的方式管理所有任务&#xff1f; 70.考虑一种情况&#xff0c;即公司希望通过维持最低成本来提高其效率和技术运营…

Java流程控制语句——跳转语句详解:break 与 continue 有什么区别?

&#x1f310;在Java编程中&#xff0c;break和continue是两个重要的控制流语句&#xff0c;它们允许开发者根据特定条件改变程序的执行流程。虽然两者都用于中断当前的行为&#xff0c;但它们的作用方式不同。本文将通过生动的例子来详细解释这两个语句&#xff0c;并使用流程…

C++/Qt 集成 AutoHotkey

C/Qt 集成 AutoHotkey 前言AutoHotkey 介绍 方案一&#xff1a;子进程启动编写AutoHotkey脚本准备 AutoHotkey 运行环境编写 C/Qt 代码 方案二&#xff1a;显式动态链接方案探索编译动态链接库集成到C工程关于AutoHotkeyDll.dll中的函数原型 总结 前言 上一篇介绍了AutoHotkey…