【C++04】C++对象构造和析构

1、构造函数和析构函数

构造函数和析构函数,这两个函数将会被编译器自动调用,完成对象初始化和对象清理工作。

  • 构造函数主要作用在于创建对象时为对象的成员属性赋值,构造函数由编译器自动调用,无须手动调用。
  • 析构函数主要用于对象销毁前系统自动调用,执行一些清理工作。

1 构造函数

  • 没有返回值 不用写void
  • 函数名 与 类名相同
  • 可以有参数 ,可以发生重载
  • 构造函数 由编译器自动调用一次 无须手动调用

2 析构函数

  • 没有返回值 不用写void
  • 函数名 与类名相同 ,函数名前 加 ~
  • 不可以有参数 ,不可以发生重载
  • 析构函数 也是由编译器自动调用一次,无须手动调用

2、构造函数的分类和调用

1 分类

  • 按照参数分类: 有参 无参(默认)
  • 按照类型分类: 普通 拷贝构造 ( const Person & p )

2 调用

1 调用方法:

  • 括号法
  • 显示法
  • 隐式法(可读性较差,不建议使用)

2 注意事项

  • 不要用括号法 调用无参构造函数 Person p3(); 编译器认为代码是函数的声明
  • 不要用拷贝构造函数 初始化 匿名对象 Person(p3); 编译器认为 Person p3对象实例化 如果已经有p3 p3就重定义

3 匿名对象 特点: 当前行执行完后 立即释放

class Person
{
public:
	Person()
	{
		cout << "Person的默认构造函数调用" << endl;
	}

	Person(int age)
	{
		m_Age = age;
		cout << "Person的有参构造函数调用" << endl;
	}

	//拷贝构造函数
	Person(const Person& p)
	{
		cout << "Person的拷贝构造函数调用" << endl;
		m_Age = p.m_Age;
	}

	//析构函数
	~Person()
	{
		cout << "Person的析构函数调用" << endl;
	}

	int m_Age;
};

//构造函数的调用
void test01()
{
	//Person p;
	//1、括号法
	//Person p1(10);
	//Person p2(p);
	//注意事项一 
	//不要用括号法 调用无参构造函数  Person p3();  编译器认为代码是函数的声明

	//2、显示法
	//Person p3 = Person(10); //有参构造
	//Person p4 = Person(p3); //拷贝构造
	//Person(10); //匿名对象  特点: 当前行执行完后 立即释放
	//注意事项二
	//不要用拷贝构造函数 初始化 匿名对象 Person(p3); 编译器认为 Person p3对象实例化  如果已经有p3  p3就重定义

	//3、隐式法  
	Person p5 = 10; //Person p5 = Person(10);
	Person p6 = p5;
}

3、拷贝构造函数的调用时机

  1. 用已经创建好的对象来初始化新的对象
  2. 值传递的方式 给函数参数传值
  3. 以值方式 返回局部对象
class Person
{
public:
	Person()
	{
		cout << "Person的默认构造函数调用" << endl;
	}

	Person(int age)
	{
		m_Age = age;
		cout << "Person的有参构造函数调用" << endl;
	}

	//拷贝构造函数
	Person(const Person& p)
	{
		cout << "Person的拷贝构造函数调用" << endl;
		m_Age = p.m_Age;
	}

	//析构函数
	~Person()
	{
		cout << "Person的析构函数调用" << endl;
	}
	int m_Age;
};

//1、用已经创建好的对象来初始化新的对象
void test01()
{
	Person p1(18);
	Person p2 = Person(p1);
	cout << "p2的年龄:" << p2.m_Age << endl;
}

//2、值传递的方式 给函数参数传值
void doWork(Person p)
{

}
void test02()
{
	Person p1(100);
	doWork(p1);
}

//3、以值方式 返回局部对象
Person doWork2()
{
	Person p;
	return p;
}

void te

你可能感兴趣的:(c++,开发语言,数据结构)