24.类和对象-对象特性——构造函数的分类以及调用

是我自己的学习笔记,记录下来主要想看的是注释 代码可以忽略  欢迎大家指正 

两种分类方式:

        按参数分类:有参、无参构造

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

三种调用方式:

        括号法 显示法  隐式转换法

#include<iostream>
#include<string>
#include<Ctime>
using namespace std;
//对象的初始化和清理
//1.构造函数 进行初始化操作
class person
{
	//1、构造函数
	//没有返回值 不用写void
	//函数名与类型名相同
	//构造函数可以有参数,可以发生重载
	//创建对象的时候,构造函数会自动调用,而且只调用一次
public:
	//构造函数
	person()
	{
		cout << "person的无参构造函数的调用" << endl;
	}
	person(int a)
	{
		age = a;

		cout << "person的有参构造函数的调用" << endl;
	}
	//拷贝构造函数
	person(const person  &p)//拷贝过程中要加const变为只读状态 还要使用引用的方式接收实参
	{
		//将传入的人身上的所有属性 拷贝到我身上
		age = p.age;
	}
	int age;
	//2、析构函数 进行清理的操作
	//没有返回值 不写void
	//函数名和类名相同  在名称之前要加~符号
	// 析构函数不可以有参数,不可以发生重载
	// 对象在销毁前会自动调用析构函数而且只会调用一次
	~person()
	{
		cout << "person的析构函数" << endl;
	}
};
//构造和析构都是必须有的实现,如果我们自己不过构造,编译器会提供一个空实现的构造
void test01()
{
	//1、括号法
	//person p;//默认构造函数的调用
	//person p2(10);//会调用有参构造函数
	//person p3(p2);//拷贝构造函数
	//cout << "p2的年龄: "<< p2.age << endl;
	//cout << "p3的年龄: " << p3.age << endl;
	//注意事项 调用默认构造函数的时候 ,不要加()  不然编译器会认为这是一个函数的声明  不会认为在创建对象
	//2、显示法
	person p1;
	person p2 = person(10);//有参构造  person(10)匿名对象 特点:当执行结束后,系统会立即回收掉匿名对象 
	person p3 = person(p2);//拷贝构造
	//注意事项2 不要利用拷贝函数 初始化匿名对象 编译器会认为 person(p3)===person p3; 对象的声明
	//3、隐式转换法
	person p4 = 10; //相当于写了 person p4=person(10)
	person p5 = p4;
}
int main()
{
	test01();
	system("pause");//按任意键继续
	return 0;//关闭程序
} 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值