20250127_C++高级编程

news/2025/1/27 13:44:15/文章来源:https://www.cnblogs.com/hummels/p/18692568

对象初始化

  • 1 类的4个常见的构造函数

    • 1.1 类对象初始化的3个函数
      • 1.1.1 默认构造函数

        FunctionClass(int data = 10) :m_data(data)
        {cout << "FunctionClass(int)" << endl;  
        }
        
      • 1.1.2 拷贝构造函数

        FunctionClass::FunctionClass(const FunctionClass& other)
        {m_data = other.m_data;
        }
        // 当有新对象生成时,调用拷贝构造函数。
        
      • 1.1.3 函数运算符重载(= 赋值运算符)

        FunctionClass& FunctionClass::operator=(const FunctionClass& other)
        {// TODO: 在此处插入 return 语句m_data = other.m_data;return *this;
        }
        // 当没有新对象生成时,调用赋值函数
        // 当使用临时对象为已有对象赋值时,先创建临时对象,再为已有对象赋值。
        

  • 2 编码实践

    	    FunctionClass f1; // 创建FunctionClass类的对象 f1FunctionClass f2(); //声明一个函数f2, 其返回对象类型为 FunctionClass
    

静态数组, 动态数组, 指针数组, 数组指针

      • 静态数组
    // 创建一个对象数组,其大小为2,会分别执行5次构造函数和析构函数。
    // 静态对象数组:数组和其中的对象,都存储在栈内存(stack)中FunctionClass f_array[2]; 
    

File

      • 动态数组
	// 创建一个FunctionClass类型的指针,指向1个临时数组,数组中存储有2个临时对象,存储在堆上,程序退出时,不会调用析构函数。// 动态对象数组,数组和其中的对象都存储在堆内存(heap)中。FunctionClass* f_array_2 = new FunctionClass[2]; //delete f_array_2; // 错误,f_array_2 是一个指向数组的指针。delete[] f_array_2;
~~~- - - **指针数组**
```C++// 指针数组, 指针数组是局部变量,存储在栈内存中,指针数组中的元素存储在堆内存中,需要显式删除。// 数组指针,指向一个数组的指针FunctionClass* f_array3[2]; // 定义一个指针数组,其元素为指针for ( int  i = 0; i < 2; i++){f_array3[i] = new FunctionClass();}for (int i = 0; i < 2; i++){delete f_array3[i];}

File002


函数参数

  • 形参 形参是函数定义时使用的参数,它们充当函数的局部变量,用于接收调用函数时传递的值。形参在函数定义时声明。

  • 实参 实参是函数调用时传递给函数的实际参数。它们是函数调用时传递给形参的值或引用。实参的类型和个数应与形参相匹配。

  • 按值传递(pass-by-value):将实参的值传递给形参,形参是实参的副本,函数内部对形参的修改不会影响实参。

  • 按引用传递(pass-by-reference):将实参的引用传递给形参,函数内部修改形参会影响实参。

  • 按指针传递(pass-by-pointer):通过指针将实参的地址传递给形参,函数可以通过指针修改实参。

// 按值传递(pass-by-value):将实参的值传递给形参,形参是实参的副本,函数内部对形参的修改不会影响实参。
FunctionClass get_object1(FunctionClass other)
{int data = other.get_data();FunctionClass tmp(data);return tmp;
}FunctionClass f3;FunctionClass f4;f4 = get_object1(f3);
~~~
![File005](file005.png)```C++
//按引用传递(pass - by - reference):将实参的引用传递给形参,函数内部修改形参会影响实参。
FunctionClass get_object2(FunctionClass& other)
{int data = other.get_data();return FunctionClass(data);
}FunctionClass f5;FunctionClass f6;f6 = get_object2(f5);
  • 声明对象是指告诉编译器该对象的名字和类型,但并不为该对象分配内存。声明对象通常出现在头文件中,或者在函数外部进行作用域声明。声明对象不会创建对象的实例,也不为对象分配内存空间。
  • 定义对象是指创建对象的实例,并为其分配内存。定义对象不仅仅是声明对象,还包括为该对象分配内存,初始化对象的成员变量,以及执行对象的构造函数(如果有的话)。定义对象通常出现在源文件中(.cpp 文件)。

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

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

相关文章

vsCreator笔记_I/O控制

1, I/O接口端子说明 2, I/O接口功能分配 3, 以上为默认设置, 也可通过vsCreator环境设置\I/O端子设置 4, 输入信号接线示意图5, 输出信号接线示意图

Windows bat批处理读取文件增加行号

前言全局说明Windows bat批处理读取文件增加行号一、说明 1.1 环境: Windows 11 家庭版 23H2 22631.3737 Microsoft Windows [版本 10.0.22631.4751]二、文件内容 2.1 来源文件内容 文件名:source.ini a bCdE2.2 批处理内容 文件名:line_num.bat @echo offset "INI_FILE…

Linux 中 如何将time命令输出的时间信息保存在文件中

001、 通常做法[root@localhost test]# time seq 10 > a.txt 2> xxx ## 完全追加至xxxreal 0m0.002s user 0m0.000s sys 0m0.002s [root@localhost test]# ls a.txt xxx [root@localhost test]# cat a.txt 1 2 3 4 5 6 7 8 9 10 [root@localhost test]# c…

ABCDE:一个使用Kotlin编写的OpenHarmony逆向工具包

ABCDE是一个使用Kotlin编写的OpenHarmony逆向工具包,目前已经实现的功能为解析方舟字节码文件中 的类信息、方法信息、字面量数组信息以及对方法进行反汇编,解析资源索引文件等功能。 该工具核心功能由纯kotlin(jvm)实现,因此可以提供平台无关的jar包供java工程引用并二次…

【Linux性能】Linux系统中进程运行时间的五大精准检测法

在Linux操作系统的复杂而精细的运行环境中,准确了解各个进程的运行时间对于系统管理员和开发人员而言至关重要。这不仅有助于监控系统性能,还能为调试问题提供关键线索,进而实现对系统资源的高效管理。本文将深入探讨五种在Linux中检查进程运行时间的有效方法,每种方法都具…

VS Code 报错 __float128 is not supported on this target 解决方法

最近在使用 VS Code 时,每一个 cpp 文件都会有如下报错:在中文互联网上并没有搜索到很好的解决方案,但是在 stack overflow 上找到了一个比较好的回答:This problem may be caused by your VSCode using clang-tidy as the C/C++ extension. clang-tidy does not support _…

A Critique of ANSI SQL Isolation Levels.18687395

原文:A critique of ANSI SQL isolation levels摘要:ANSI SQL-92[MS, ANSI]使用脏读、不可重复读以及幻读现象(phenomena)定义了隔离级,本论文展示了这些现象,以及ANSI SQL定义并无法合适的描述众多流行的隔离级别,包括(ANSI标准)所涵盖的级别的标准锁实现。我们还介绍…

0127人工智能创新型教师培育计划(第一期) 试题

# 试题 http://site01.openhydra.net:30012/evt/uploadcode人工智能创新型教师培育计划(第一期)​ 【活动进展每日更新1月26日】​活动更新(1月26日 22:00更新): Python作业​教师AI基础考核作业(见下面介绍),或者可以下载word文件 查看。 1月31日中午24:00前提交, 作…

.net core 使用账号密码方式读取SharePoint 文件(记录)

项目环境 .net 6.0 原代码 是.netframework 4.6 原代码引用了Microsoft.SharePoint.Client 包去操作.其中身份验证的使用的是 SharePointOnlineCredentials 类.但迁移到.net 6,0 后发现这个类已经被移除.测试了常用 的各种方式,大部分均返回403 解决方案: 使用包 dotnet add…

mkcert生成ssl证书+nginx部署局域网内的https服务访问

环境 使用的是树莓派 安装的是ubuntu 系统 https://github.com/FiloSottile/mkcert/releases 下载 添加权限 chmod 777 ./mkcert-v1.4.4-linux-arm64 1、CA 证书加入本地可信 CA ./mkcert-v1.4.4-linux-arm64 -install 2、生成自签证书 ./mkcert-v1.4.4-linux-arm64 …