C++_复习02(构造函数的分类及构造函数的意义)

一、构造函数的分类 

构造函数分为三类:

  1. 无参数构造函数
  2. 有参数构造函数(有3种使用形式)
  3. 赋值构造函数或叫拷贝构造函数(初始化与赋值是两个概念期间只会调用一次构造函数!!

二、构造函数分类演示

此处特别注意:

  1. C++对等号操作符进行了功能性增强
  2. 有参数构造函数第二种使用方法时要注意逗号表达式,逗号表达式的最后一个值是才是这个表达式的值
  3.  如:Test2 t2_22 = (3, 4); //实际上调用的也是一个参数的构造函数(传入的为4)
  4. 通过拷贝构造函数完成 t3 对象的初始化,并不等同于t3=t2_2 (这里是赋值)初始化与赋值是两个概念。
    Test2 t3 = t2_2;
    拷贝构造函数只会调用一次构造函数。期间产生一个匿名对象,直接把匿名对象转成 t3.
#include<iostream>
using namespace std;

class Test2
{
public:
	Test2() {
		a = 0;
		b = 0;
		cout << "无参数构造函数" << endl;
	}
	Test2(int m_a, int m_b){
		a = m_a;
		b = m_b;
		cout << "有参数构造函数" << endl;
	}
	Test2(int m_a) {
		a = m_a;
		cout << "有参数构造函数" << endl;
	}
	Test2(const Test2& obj) {
		
		cout << "赋值构造函数/拷贝构造函数" << endl;
	}
	
	~Test2()//析构函数 
	{
	}
private:
	int a;
	int b;

};

//给对象搭建一个舞台,研究对象完整的生命周期
void objectplay2()
{
	Test2 t1;//调用无参数构造函数

	//调用有参数构造函数3种方法
	//第一种
	Test2 t2_1(1, 2);

	//第二种(仅适用于一个参数)
	Test2 t2_2 = 2;//C++对等号操作符进行了功能性增强
	//逗号表达式最后一个值是这个表达式的值
	Test2 t2_22 = (3, 4);//实际上调用的也是一个参数的构造函数

	//第三种 直接调用构造函数完成t3对象的初始化
	//并不等同于t3=t2_2 (这里是赋值)初始化与赋值是两个概念
	//只会调用一次构造函数!!优化了
	Test2 t3 = t2_2;//这种方法会产生一个匿名对象
	//匿名对象的生命周期非常重要

int main()
{
	system("pause");
}

三、为什么需要构造函数

如果没有构造函数就需要自己定义一个initialize函数,需要在对象创建之后手动调用函数进行初始化。

  • initialize函数只是一个普通的函数,必须显示调用
  • 一旦由于失误的原因对象没有初始化,那么结果将不确定。没有初始化的对象其内部成员变量的值是不定的。
  • 初始多个对象时操作复杂

发布了27 篇原创文章 · 获赞 3 · 访问量 3343

猜你喜欢

转载自blog.csdn.net/weixin_40977054/article/details/102378303