当前位置: 首页 > news >正文

C++基础知识:构造函数的分类和调用,有参构造和无参构造,有参构造和无参构造,三种调用方式:括号法,显示法,隐式转换法,以及相关代码演示和注意事项

1.构造函数的分类及调用:

2.两种分类方式:


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


3.三种调用方式:


括号法
显示法
隐式转换法

2.调用方法代码演示

1.括号法代码演示:
#include<iostream>using namespace std;//1.构造函数的分类和调用//分类
//按照参数分类-----无参构造(也称之为默认构造)和有参构造
//按照类型分类-----普通构造和拷贝构造class Person {
public:/*无参构造*/Person() {cout << "Person的无参构造函数调用" << endl;}/*有参构造*/Person(int a) {age = a;cout << "Person的有参构造函数调用" << endl;}//拷贝构造函数(简单来说就是克隆)Person(const Person& p) {//要加const进行限制,并且要引用age = p.age;//将传入的人身上的所有属性,拷贝到我身上(也就是调用这个构造函数的对象身上)cout << "Person的有参拷贝构造函数调用" << endl;}int age;~Person(){cout << "Person的析构函数调用" << endl;}
};//调用
void test01() {//1.括号法Person p1;//默认构造函数的调用Person p2(10);//有参构造函数Person p3(p2);//拷贝构造函数//拷贝构造函数的用途cout << "p2的年龄为:" << p2.age << endl;//因为是拷贝所以p3的年龄也为10cout << "p3的年龄为:" << p3.age << endl;//注意调用默认构造函数的时候不要加()//Person p1();//编译器会认为这是一个函数声明,不会认为在创建对象}int main() {test01();system("pause");return 0;
}
1.1括号法代码效果:

2.显示法:
#include<iostream>using namespace std;//1.构造函数的分类和调用//分类
//按照参数分类-----无参构造(也称之为默认构造)和有参构造
//按照类型分类-----普通构造和拷贝构造class Person {
public:/*无参构造*/Person() {cout << "Person的无参构造函数调用" << endl;}/*有参构造*/Person(int a) {age = a;cout << "Person的有参构造函数调用" << endl;}//拷贝构造函数(简单来说就是克隆)Person(const Person& p) {//要加const进行限制,并且要引用age = p.age;//将传入的人身上的所有属性,拷贝到我身上(也就是调用这个构造函数的对象身上)cout << "Person的有参拷贝构造函数调用" << endl;}int age;~Person(){cout << "Person的析构函数调用" << endl;}
};//调用
void test01() {//2.显示法Person p1;//默认构造是一样的Person p2 = Person(10);//有参构造Person p3 = Person(p2);//有参构造//注意事项1:Person(10);//匿名对象,特点:当前行执行结束后,系统会立即回收掉匿名对象//2.注意事项2;//不要利用拷贝构造函数 初始化匿名函数//下面这个编译器会认为是Person (p3)===Person p3;//对象申明//Person(p3);//会报错cout << "打印线———————" << endl;
}int main() {test01();system("pause");return 0;
}
2.1显示法代码执行结果:

3.隐式转换法:
#include<iostream>using namespace std;//1.构造函数的分类和调用//分类
//按照参数分类-----无参构造(也称之为默认构造)和有参构造
//按照类型分类-----普通构造和拷贝构造class Person {
public:/*无参构造*/Person() {cout << "Person的无参构造函数调用" << endl;}/*有参构造*/Person(int a) {age = a;cout << "Person的有参构造函数调用" << endl;}//拷贝构造函数(简单来说就是克隆)Person(const Person& p) {//要加const进行限制,并且要引用age = p.age;//将传入的人身上的所有属性,拷贝到我身上(也就是调用这个构造函数的对象身上)cout << "Person的有参拷贝构造函数调用" << endl;}int age;~Person(){cout << "Person的析构函数调用" << endl;}
};//调用
void test01() {//3.隐式转换法Person p4 = 10;//相当于Person p4 =Person(10) 有参构造Person p5 = p4;//拷贝构造}int main() {test01();system("pause");return 0;
}
3.1隐式转换法代码执行结果:

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 文件上传题目练习
  • 书生大模型实战营--L1关卡-Llamaindex RAG实践
  • 正则采集器之三——前端搭建
  • C#插件 调用存储过程(输出参数类型)
  • Ubuntu开机自启配置(基于service:以ROS和docker为例)
  • 计算机毕业设计选题推荐-零食批发商仓库管理系统-Java/Python项目实战
  • Zookeeper源码剖析-ZAB协议选举流程
  • Oracle核心进程详解并kill验证
  • js中map属性
  • vue2 前端实现pdf在线预览(无插件版)
  • “八股文”在程序员面试中的作用及其对实际工作的影响
  • Java整理14
  • C++ 沙漏图案(Hour-glass Pattern)
  • JavaScript_语法_运算符_一元运算符
  • Python面试题:结合Python技术,如何使用Alembic进行数据库迁移管理
  • android高仿小视频、应用锁、3种存储库、QQ小红点动画、仿支付宝图表等源码...
  • HTTP--网络协议分层,http历史(二)
  • Linux快速复制或删除大量小文件
  • Material Design
  • NSTimer学习笔记
  • rabbitmq延迟消息示例
  • Spring Cloud Feign的两种使用姿势
  • VirtualBox 安装过程中出现 Running VMs found 错误的解决过程
  • Vue 动态创建 component
  • 当SetTimeout遇到了字符串
  • 第十八天-企业应用架构模式-基本模式
  • 汉诺塔算法
  • 机器人定位导航技术 激光SLAM与视觉SLAM谁更胜一筹?
  • 机器学习学习笔记一
  • 面试遇到的一些题
  • 前端面试题总结
  • 腾讯优测优分享 | Android碎片化问题小结——关于闪光灯的那些事儿
  • 文本多行溢出显示...之最后一行不到行尾的解决
  • # 飞书APP集成平台-数字化落地
  • #07【面试问题整理】嵌入式软件工程师
  • $NOIp2018$劝退记
  • (10)STL算法之搜索(二) 二分查找
  • (4)通过调用hadoop的java api实现本地文件上传到hadoop文件系统上
  • (6)STL算法之转换
  • (六)软件测试分工
  • (已更新)关于Visual Studio 2019安装时VS installer无法下载文件,进度条为0,显示网络有问题的解决办法
  • (原)记一次CentOS7 磁盘空间大小异常的解决过程
  • (转)ORM
  • .[hudsonL@cock.li].mkp勒索病毒数据怎么处理|数据解密恢复
  • .FileZilla的使用和主动模式被动模式介绍
  • .NET Core 2.1路线图
  • .NET Core跨平台微服务学习资源
  • .NET delegate 委托 、 Event 事件
  • .Net Remoting常用部署结构
  • .NetCore项目nginx发布
  • .Net插件开发开源框架
  • .net反编译的九款神器
  • .NET简谈互操作(五:基础知识之Dynamic平台调用)
  • .so文件(linux系统)
  • /etc/sudoer文件配置简析