量化交易之C++篇 - 构造函数的分类及调用、拷贝构造函数的调用时机、构造函数的调用规则

// 构造函数的分类及调用
#include <iostream>

using namespace std;


// 分类
// 按照参数进行分类 无参构造函数 (默认构造函数)       有参构造函数
// 按照类型进行分类 普通构造函数                      拷贝构造函数
class Person {

public: // 构造和析构必须写在 public 下才可以调用到;

	Person() { // 默认、无参构造函数
		cout << "默认构造函数 调用" << endl;
	}

	Person(int a) {
		cout << "有参构造函数 调用" << endl;
	}

	Person(const Person& person) { // 拷贝构造函数: const 必须加;

		this->m_Age = person.m_Age;

		cout << "拷贝构造函数 调用" << endl;
	}


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


	int m_Age;
};


void test01() {

	Person person1; // 默认构造函数 不要加小括号( person1() );

	Person person2(1);
	person2.m_Age = 19;
	
	Person person3(person2);
	cout << person3.m_Age << endl;
}

void test02() {

	Person person4 = Person(100);
	Person person5 = Person(person4);

}


int main() {

	test01();

	test02();

	return EXIT_SUCCESS;
}
// 拷贝构造函数的调用时机
#include <iostream>
#include <string>

using namespace std;


class Person {

public: // 构造和析构必须写在 public 下才可以调用到;

	Person() { // 默认、无参构造函数
		cout << this->name << " 默认构造函数 调用" << endl;
	}

	Person(int a) {
		cout << this->name << " 有参构造函数 调用" << endl;
	}

	Person(const Person& person) { // 拷贝构造函数: const 必须加;

		this->m_Age = person.m_Age;

		cout << this->name << " 拷贝构造函数 调用" << endl;
	}


	~Person() {
		cout << this->name << " 析构函数 调用" << endl;
	}


	int m_Age;
	string name = "person ";
};


// 拷贝构造函数调用的时机
// 1. 用已经创建好的对象来初始化新的对象;
void test01() {
	Person person1;
	person1.name = "test01 person";

	Person person2(person1);
}


// 2. 以值传递的方式给函数参数传值;
void doWork02(Person person1) {

	person1.name = "doWork02 person ";

}

void test02() {
	Person person;
	person.name = "test02 person";

	doWork02(person);
}


// 3. 以值方式返回局部对象;
Person doWork03() {

	Person person;
	person.name = "doWork03 person";

	return person;
}

void test03() {
	Person person = doWork03();
	person.name = "test03 person";
}



// 4. 以地址传递的方式给函数参数传值;
void doWork04(Person& person1) {

	person1.name = "doWork04 person";

}

void test04() {
	Person person;
	person.name = "test04 person";

	doWork04(person);
}



int main() {

	//test01();

	//test02();

	//test03();

	test04();

	return EXIT_SUCCESS;
}
// 构造函数的调用规则
#include <iostream>

using namespace std;


class MyClass {

public:
	/*MyClass() {
		cout << "默认 构造函数" << endl;
	}*/

	MyClass(int a) {
		cout << "有参 构造函数" << endl;
	}

	//MyClass(const MyClass& myClass) {
	//	cout << "拷贝 构造函数" << endl;
	//}


	~MyClass() {
		cout << "析构函数" << endl;
	}

	int gradeNumber;
	int classNumber;

};


// 1. 当类内只提供了有参构造函数, 那么系统就不会再提供默认构造函数了;
// 但是 系统还会提供默认拷贝构造函数
// 当类内提供了 拷贝构造, 那么系统就不会提供其他构造了
void test01() {

	MyClass myClass1(1);
	myClass1.gradeNumber = 3;
	myClass1.classNumber = 4;

	MyClass myClass2(myClass1); // 即使类中没有实现 拷贝构造函数, 系统会默认实现
	myClass2.gradeNumber = 2;
	myClass2.classNumber = 3;

	cout << "myClass1.gradeNumber: " << myClass1.gradeNumber << endl; // 3
	cout << "myClass1.classNumber: " << myClass1.classNumber << endl; // 4

	cout << "myClass2.gradeNumber: " << myClass2.gradeNumber << endl; // 2
	cout << "myClass2.classNumber: " << myClass2.classNumber << endl; // 3
}


int main() {

	test01();

	return EXIT_SUCCESS;
}

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值