![](https://img-blog.csdnimg.cn/20201014180756926.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
C++核心编程
文章平均质量分 69
愈努力俞幸运
这个作者很懒,什么都没留下…
展开
-
返回类对象时,什么时候调用拷贝构造函数,什么时候会进行返回值优化(RVO)
在C++中,返回值优化(Return Value Optimization,RVO)是一种编译器优化技术,用于避免不必要的对象拷贝。需要注意的是,对于编译器优化的行为并没有明确的规定,不同的编译器和编译器设置可能会有不同的结果。在某些情况下,编译器可能会对这些情况进行优化,避免不必要的拷贝构造函数的调用,这取决于编译器的实现和优化策略。需要注意的是,返回值优化是编译器的一种优化技术,不是C++标准的要求。不同的编译器可能有不同的优化策略,因此在其他编译器或编译器设置下,可能会触发拷贝构造函数的调用。原创 2023-05-31 19:36:56 · 706 阅读 · 0 评论 -
C++职工管理系统,eof()函数,选择排序
用户在批量创建时可能会创建不同种类的员工,但是数组种所有数据的数据类型都相同。那我们应该怎么办呢?父类的指针可以指向子类的对象,那么我们可以让数组保存父类的指针。在堆区开辟这样的数组,返回相应类型的指针,所以我们需要在workManager.h中创建相应的指针接收。抽象类不需要做任何实现,所以不需要写个.cpp来弄具体的实现。在职工管理系统.cpp main函数中调用菜单展示。并在添加职工时 将文件是否为空的标志设为不空。main函数测试,运行职工管理系统.cpp。3.2.2在.cpp中写具体实现。原创 2023-01-12 16:33:01 · 392 阅读 · 0 评论 -
c++文件操作
【代码】c++文件操作。原创 2023-01-05 16:16:03 · 117 阅读 · 0 评论 -
C++多态
首先,当我们父类不写虚析构时,只会调用父类的析构函数,这个可能和一开始学动态多态一样,因为是父类的指针,地址早绑定,不管传猫还是传狗进去,都执行父类的speak,“动物在说话”,当我们父类中写了虚析构之后,那么子类的vftable就是自己的析构函数,那么这时在释放就会调用子类的析构函数。至于为什么会调用父类的析构函数,可能是因为,当我们创建子类对象的时候,会调用父类的构造函数,然后在调用子类的构造函数,析构则相反,所以子类调用了析构,父类也会调用。不加virtual时的Animal类。原创 2023-01-03 23:41:05 · 351 阅读 · 0 评论 -
C++继承
继承 语法:class 子类:继承方式 父类。原创 2023-01-01 19:57:01 · 720 阅读 · 0 评论 -
C++运算符重载,匿名对象,三连等
对于内置的数据类型的表达式运算符是不可以改变的,比如你把两个整型数据相加的,在函数里面写两数相减,这是不允许的。原创 2022-12-22 00:48:14 · 1074 阅读 · 0 评论 -
C++友元,常成员函类外实现
【代码】C++友元。原创 2022-12-17 21:48:40 · 83 阅读 · 0 评论 -
C++对象模型和this指针
空指针是可以访问成员函数的,没有加this的可以直接调用,加this的也可以写个判断。下面的代码会随机给一个年龄,并不是18岁。如果返回的是p2那我就可以接着调用。常对象的属性也是不允许修改的。解决方法一:起不一样的名字。解决方法二:this指针。原创 2022-12-16 21:24:24 · 623 阅读 · 0 评论 -
C++对象的初始化和清理,构造函数,析构函数,深拷贝,浅拷贝,初始化列表,静态成员变量,静态成员函数,返回值时return*this返回的是右值
这里person p = doWork2()不会调用拷贝方法,因为编译器优化,会直接用对象p存放dowork2()的返回值。浅拷贝问题要利用深拷贝解决,编译器提供的浅拷贝不太好使,那就自己写一个拷贝构造函数,使它指向一段新的堆区的数据。总结:如果属性有在堆区开辟的,一定要自己提供拷贝构造函数,防止浅拷贝带来的问题。接下来是p1,它的指针不空,释放它指向的堆区的内存,m_Height不空,释放它指向的堆区的内存。这就是浅拷贝带来的问题,堆区数据被重复释放。当自己不提供默认构造函数时,程序也会提供。原创 2022-12-14 19:43:39 · 520 阅读 · 0 评论 -
C++类和对象--封装,类分文件编写
【代码】C++类和对象--封装。原创 2022-12-11 15:17:12 · 1032 阅读 · 0 评论 -
C++函数的提高--函数重载,默认参数,占位参数
/函数默认参数//语法:返回值类型 函数名(形参 = 默认值){}{}{}//注意事项//1、如果某个位置已经有默认参数,那么从这个位置往后,从左至右都必须有默认值/*错误代码{}*///2、如果函数的声明有默认参数,那么函数定义就不能有默认参数;//如果函数定义有了,声明就不能有//声明和定义只能有一个有默认参数/*//函数声明int func3(int a = 10, int b = 10)//函数定义{}*/int main(){原创 2022-12-10 01:51:51 · 233 阅读 · 0 评论 -
C++引用,左值,右值
指针常量,指针的指向不可以修改,指针指向的值可以修改。原创 2022-12-09 21:38:43 · 206 阅读 · 0 评论 -
C++程序的内存分区模型-四区
目录1.内存分区模型 1.1代码区和全局区 1.1.1代码区1.1.2全局区 1.2栈区和堆区1.2.1栈区 1.2.2堆区 1.3new操作符,delete操作符 程序执行前就已经划分了代码区和全局区总结: 程序运行后划分出栈区和堆区 1.2.2堆区原创 2022-12-06 21:40:49 · 159 阅读 · 0 评论