关闭页面特效

类和对象 —— 函数的分类以及调用

类和对象 —— 函数的分类以及调用

1、函数的分类

两种分类方式:

按参数分为:有参构造和无参构造

按类型分为:普通构造和拷贝构造

2、函数的调用

(1)括号法
Person p1; //默认构造函数 Person p2(10); //有参构造函数 Person p3(p2); //拷贝构造函数
(2)显示法
Person p1; Person p2 = Person(10); Person p3 = Person(p2);
(3)隐式法
Person p2 = 10; //相当于Person p2 = Person(10); Person p3 = p2;

代码演示:

#include<iostream> using namespace std; class Person{ public: Person() { cout<<"这是一个默认的构造函数"<<endl; } Person(int var) { cout<<"这是一个有参的构造函数"<<endl; age = var; } Person(const Person &p) { cout<<"这是一个拷贝构造函数"<<endl; age = p.age; } ~Person() { cout<<"这是一个析构函数"<<endl; } private: int age; }; void test() { Person p1; Person p2(10); Person p3(p2); } int main() { test(); return 0; }

tips:

调用如下: Person(10); //匿名对象 特点:当前行执行结束后,系统会立即回收掉匿名对象 cout<<"qwewqwe"<<endl; 输出如下: 这是一个有参的构造函数 这是一个析构函数 qweqwe

不要使用拷贝构造函数初始化匿名对象

示例如下: Person(p3); //重定向错误,编译器会认为Person(p3) === Person p3;对象的声明 cout<<"123123"<<endl;

3、拷贝构造函数调用

C++中拷贝构造函数调用时机通常有三种情况:

  • 使用一个已经创建完毕的对象来初始化一个新对象

  • 值传递的方式给函数参数传值

  • 以值方式返回局部对象

4、构造函数调用规则

默认情况下,C++编译器至少给一个类添加3个函数:

(1). 默认构造函数*(无参,函数体为空)
(2).默认析构函数(无参,函数体为空)
(3).默认拷贝构造函数,对属性进行值拷贝

构造函数调用规则如下:

  • 如果用户定义有参构造函数,C++不再提供默认无参构造,但是会提供默认拷贝构造
  • 如果用户定义拷贝构造函数,C++不会再提供其他构造函数

5、深拷贝与浅拷贝

浅拷贝:简单拿的赋值拷贝操作

深拷贝:在堆区重新申请空间,进行拷贝操作

浅拷贝带来的问题是堆区的内存重复释放,浅拷贝的问题利用深拷贝来解决

Tips:如果属性有在堆区开辟的,一定要自己提供拷贝构造函数,防止浅拷贝带来的问题


__EOF__

作  者WKL
出  处https://www.cnblogs.com/kingwkl/p/15953007.html
关于博主:编程路上的小学生,热爱技术,喜欢专研。评论和私信会在第一时间回复。或者直接私信我。
版权声明:署名 - 非商业性使用 - 禁止演绎,协议普通文本 | 协议法律文本
声援博主:如果您觉得文章对您有帮助,可以点击文章右下角推荐一下。您的鼓励是博主的最大动力!

posted @   W_K_L  阅读(365)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· AI技术革命,工作效率10个最佳AI工具
0
0
关注
跳至底部
点击右上角即可分享
微信分享提示