C++ 初阶 | 类和对象易错知识点(下)

目录

0.引言

1.初始化列表

2.static

静态成员变量:

静态成员函数:

3.友元函数

4.内部类

定义:

特点:

应用:

5.优化写法

6.例题   求和1+2+...+n  (不能用for/while/if/else等关键字)

7.总结


0.引言

今天,咱接着上文,继续来唠唠类和对象中的易错知识点😄😄😄

1.初始化列表

🚩形式:类名(类型名 参数):成员变量名(形参1),成员变量名(形参2)...{}

   // eg: A ( int  a) : _a1(a),_a2(a1){}

class A

{

public:

A ( int  a) : _a1(a),_a2(a1){}

private:

int _a1;

int _a2;    //★ tip:初始化列表列表顺序尽量与声明顺序一致,因为初始化是按声明顺序进行的。

}

🚩必须要使用初始化列表的情况:1)引用成员变量;2)const成员变量;3)没有默认构造的类类型。

🚩成员变量走初始化列表的逻辑顺序:👇👇👇

2.static

静态成员变量:

❀静态成员变量不属于某个对象,属于整个类(这个类的所有对象);

❀静态成员变量需要在类外初始化。

静态成员函数:

❀静态成员函数没有this指针;

❀非静态成员函数可以访问静态成员变量,静态成员函数只能访问静态成员变量。

static int GetCount()

{

   // ++_a1;   // 不能访问非静态成员变量,没有this指针

 return  _count;

}

3.友元函数

🚩形式:在函数/类声明前+friend(友元函数声明位置可以任意,不受类访问限定符限制)

🚩友元函数仅仅是一种声明,它不是类的成员函数;

🚩友元函数调用时,与普通函数类似,不会调用this指针(因为它不属于类)

🚩外部友元函数可以访问类的所有成员,但是,它是单向的(即A是B 的友元函数,A可以访问B的私有成员变量;但是B不一定能访问A);

🚩友元关系不能传递 

4.内部类

定义:

一个类定义在另一个类的内部,这个内部类就叫做内部类。

特点:

❀只是受外部类类域限制和访问限定符限制,所以外部类定义的对象中不包含(不会额外开辟资源内部类;

❀内部类默认是外部类的友元类

❀内部类是平行关系(独立开),主要是受类域和访问限定符限制。

应用:

❀当A类跟B类紧密关联,A类实现出来主要就是给B类使用,那么可以考把A类设计为B的内部类;

❀ A如果放到B类的private/protected位置,那么A类就是B类的专属内部类,其他地方都用不了。

5.优化写法

❀匿名对象(生命周期只在当前一行)

eg:

A();

A(11);

 ❀传值传参

// 传值传参 ->无优化

   A aal(1);
   f1(aa1);                    //不推荐❌

   cout<<endl;     

// 构造+拷贝构造﹣>优化直接构造
f1(A(1));                     //推荐
cout << endl << endl; 

// f1(1);                        //推荐

❀返回

 // 一个表达式中,连续拷贝构造+赋值
A aa3;
 aa3=f2();                    //不推荐❌  

cout << endl;

  // 返回时一个表达式中,连续拷贝构   
A aa2 = f2();
 cout << endl ;              //推荐

6.例题   求和1+2+...+n  (不能用for/while/if/else等关键字)

核心代码👇👇👇

#include <iostream>class Sum
{public:Sum(){_ret+=_i;_i++;};static int Getret(){return _ret;}private:static int _i;static int _ret;
};
int Sum ::_i=1;
int Sum ::_ret=0;
class Solution {
public:int Sum_Solution(int n) {Sum a[n];return Sum::Getret();}
};int main()
{
Solution s;
int n = 100;
int result = s.Sum_Solution(n);
cout<< "The sum from 1 to "<< n << " is: " << result <<endl;
return 0;

在上述测试代码中,创建 Solution 类对象 s ,调用 Sum_Solution 函数计算1到100的累加和并输出。运行后会输出1到100的累加和为5050(通过 Sum 类构造静态成员函数的累加逻辑实现)。

7.总结

看了上面的代码,咱们是不是觉得今天的知识点,得到了运用呢🤭

希望大家可以和小邓儿一起学习和进步哈O(∩_∩)O

都看这么久了呢,别忘了一键三连哦😘😘😘

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

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

相关文章

使用yocto搭建qemuarm64环境

环境 yocto下载 # 源码下载 git clone git://git.yoctoproject.org/poky git reset --hard b223b6d533a6d617134c1c5bec8ed31657dd1268 构建 # 编译镜像 export MACHINE"qemuarm64" . oe-init-build-env bitbake core-image-full-cmdline 运行 # 跑虚拟机 export …

AWS WebRTC:获取ICE服务地址(part 3):STUN服务和TURN服务的作用

STUN服务和TURN服务的作用&#xff1a; 服务全称作用是否中继流量适用场景STUNSession Traversal Utilities for NAT 协助设备发现自己的公网地址&#xff08;srflx candidate&#xff09; ❌ 不中继&#xff0c;仅辅助NAT 穿透成功时使用TURNTraversal Using Relays around N…

分析XSSstrike源码

#用于学习web安全自动化工具# 我能收获什么&#xff1f; 1.XSS漏洞检测机制 学习如何构造和发送XSS payload如何识别响应中的回显&#xff0c;WAF&#xff0c;过滤规则等如何使用词典&#xff0c;编码策略&#xff0c;上下文探测等绕过过滤器 2.Python安全工具开发技巧 使…

npm run build 报错:Some chunks are larger than 500 KB after minification

当我们的 Vue 项目太大&#xff0c;使用 npm run build 打包项目的时候&#xff0c;就有可能会遇到以下报错&#xff1a; (!) Some chunks are larger than 500 kB after minification. Consider: - Using dynamic import() to code-split the application - Use build.rollup…

【LLM相关知识点】关于LLM项目实施流程的简单整理(一)

【LLM相关知识点】关于LLM项目实施流程的简单整理&#xff08;一&#xff09; 文章目录 【LLM相关知识点】关于LLM项目实施流程的简单整理&#xff08;一&#xff09;零、学习计划梳理&#xff1a;结合ChatGPT从零开始学习LLM & 多模态大模型一、大模型相关应用场景和头部企…

海上石油钻井平台人员安全管控解决方案

一、行业挑战与需求分析 海上钻井平台面临复杂环境风险&#xff08;如易燃易爆、金属干扰、极端气象&#xff09;和人员管理难题&#xff08;如定位模糊、应急响应延迟&#xff09;。传统RFID或蓝牙定位技术存在精度不足&#xff08;1-5米&#xff09;、抗干扰能力差等问题&am…

@Docker Compose 部署 Pushgateway

文章目录 Docker Compose 部署 Pushgateway1. 目的2. 适用范围3. 先决条件4. 部署步骤4.1 创建项目目录4.2 创建 docker-compose.yml 文件4.3 启动 Pushgateway 服务4.4 验证服务运行状态4.5 测试 Pushgateway 访问 5. 配置 Prometheus 采集 Pushgateway 数据6. 日常维护6.1 查…

项目 react+taro 编写的微信 小程序,什么命令,可以减少console的显示

在 Taro 项目中&#xff0c;为了减少 console 的显示&#xff08;例如 console.log、console.info 等&#xff09;&#xff0c;可以通过配置 terser-webpack-plugin 来移除生产环境中的 console 调用。 配置步骤&#xff1a; 修改 index.js 文件 在 mini.webpackChain 中添加 …

Java开发中常见的数值处理陷阱与规避方法

八进制字面量的误用问题 历史背景与语法特性 由于历史原因,Java保留了八进制字面量的支持。八进制字面量以数字0开头,例如037表示十进制数31(计算方式:38 + 7 = 31)。这种表示法在现代编程中极少使用,唯一合理的应用场景是表示Unix文件权限(如0644表示用户可读写,组和…

Lua5.4.2常用API整理记录

一、基础函数 1.type(value)​​ 返回值的类型&#xff08;如 "nil", "number", "string", "table", "function" 等&#xff09;。 代码测试&#xff1a; a 0 print(type(a)) a nil print(type(a)) a "aaaaaaaa&…

2025.5.29 学习日记 docker概念以及基本指令

Docker&#xff1a; Docker 是一种开源的容器化平台&#xff0c;用于快速部署应用程序&#xff0c;实现开发、测试和生产环境的一致性。 一、Docker 核心概念 镜像&#xff08;Image&#xff09; 只读的模板文件&#xff0c;用于创建容器&#xff0c;类似虚拟机的镜像&#x…

明远智睿SSD2351开发板:语音机器人领域的变革力量

在人工智能快速发展的今天&#xff0c;语音机器人逐渐成为人们生活和工作中的得力助手。明远智睿SSD2351开发板凭借强大性能与丰富功能&#xff0c;为语音机器人的发展注入新动力&#xff0c;成为该领域的变革力量。 SSD2351开发板的四核1.4GHz处理器具备强劲的运算性能&#x…

嵌入式学习笔记 - keil安装目录下的头文件自动包含问题

Keil MDK/MDK-ARM&#xff08;ARM编译器&#xff09;默认情况下会自动包含其安装目录下的标准头文件路径&#xff08;如CMSIS库、设备头文件等&#xff09;。具体机制如下&#xff1a; ‌默认自动包含‌&#xff1a; 新建工程或使用设备数据库选择芯片型号后&#xff0c;Keil会…

什么是数据驱动?以及我们应如何理解数据驱动?

在谈到企业数字化转型时&#xff0c;很多人都会说起“数据驱动”&#xff0c;比如“数据驱动运营”、“数据驱动业务”等等。 在大家言必称“数据驱动”的时代背景下&#xff0c;我相信很多人并未深究和思考“数据驱动”的真正含义&#xff0c;只是过过嘴瘾罢了。那么&#xff…

C++中全局变量和局部变量的区别

C中全局变量和局部变量的区别 在C&#xff08;以及其他编程语言&#xff09;中&#xff0c;变量的作用域和生命周期是两个非常重要的概念。全局变量和局部变量在作用域和生命周期上有显著的区别。下面我将详细讲解全局变量和局部变量的区别&#xff0c;并通过代码示例来帮助理…

基于RPA技术的ECRobot企业智能体解决方案,打通企业自动化业务流程的最后一公里

在企业的日常运营中&#xff0c;难免会遇到一些繁琐且重复的任务&#xff0c;这类高频次、低复杂度的事务性工作往往造成人力资源和成本的浪费。因此如何通过智能化工具实现流程自动化&#xff0c;已经成为企业数字化转型进程中的共性课题。 RPA技术&#xff1a;自动化赋能企业…

ipv6与p2p的关系

在PCDN&#xff08;P2P内容分发网络&#xff09;领域&#xff0c;IPv6与PCDN盒子的关系紧密且相互影响&#xff0c;主要体现在以下几个方面&#xff1a; 一、IPv6的部署推动PCDN盒子普及 地址资源充足 IPv6采用128位地址&#xff0c;解决了IPv4地址枯竭的问题&#xff0c;为PC…

大模型应用开发之预训练

预训练是研发大语言模型的第一个训练阶段&#xff0c;通过在大规模语料上进行预训练&#xff0c;大语言模型可以获得通用的语言理解与生成能力&#xff0c;掌握较为广泛的世界知识&#xff0c;具备解决众多下游任务的性能潜力 一、数据预处理 1. 数据的收集 1&#xff09;通…

[python]Prophet‘ object has no attribute ‘stan_backend‘解决方法

测试环境&#xff1a; prophet1.1.4 写代码&#xff1a; from prophet import Prophet modelProphet() print(123) 在anaconda prompt里面没有报错&#xff0c;但是打开jupyter notebook会报错Prophet object has no attribute stan_backend&#xff0c;据此猜测jupyter应该…

【HTML】基础学习【数据分析全栈攻略:爬虫+处理+可视化+报告】

- 第 102 篇 - Date: 2025 - 05 - 31 Author: 郑龙浩/仟墨 文章目录 HTML 基础学习一 了解HTML二 HTML的结构三 HTML标签1 标题2 文本段落3 换行4 加粗、斜体、下划线5 插入图片6 添加链接7 容器8 列表9 表格10 class类 HTML 基础学习 一 了解HTML 一个网页分为为三部分&…