本文主要是介绍c++构造函数初始化,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
#include <iostream>
#include <string>
using namespace std;
class Person {
public:
int id;
string name;
public:
Person() {
this->id = 200;
cout << "wu can gou zao han shu" << endl;
}
Person(int id, string name) {
this->id = id;
this->name = name;
cout << "you can gou zao han shu" << endl;
}
Person(int id);
};
Person::Person(int id) {
this->id = id;
cout << "id gou zao" << endl;
}
/**
* @brief
* 整形初始化的几种方式
*/
void TestIntInit() {
int i1 = 100;
int i2{100};
int i3(100);
int i5 = int{100};
int i6 = int(100);
int i4 = {100};
}
/**
* @brief
* 有参构造函数的几种写法
*/
void TestPersonParamInit() {
Person pp1(1, "qiumc");
Person pp2{1, "qiumc"};
Person pp3 = Person(1, "qiumc");
Person pp4 = Person{1, "qimmc"};
Person pp5 = {1, "qiumc"};
}
/**
* @brief
* 无参构造函数的几种写法
*/
void TestPersonInit() {
// 不能写成Person p1();因为这里无法和函数声明相区分开
Person p1;
Person p2{};
Person p3 = Person();
Person p4 = Person{};
Person p5 = {};
}
/**
* @brief
* 一个参数的构造函数的简写方式
*/
void TestPersonSingleParamInit() {
// 如果没有类型符合的单参构造函数,这四种写法都会报错
// 下面这些都是发生了隐式转化
// 构造函数被声明为explicit时候,会禁止所有当前自定义类的隐式类型转换,所以如果explicit修饰构造函数后,下面变量的定义都会报错
// explicit ,当有一个构造函数的定义和声明的时候,只能出现在构造函数声明处,不能出现在构造函数的定义处
Person p1 = 100; // id = 100
Person p2 = (200); // id = 200
Person p3 = (1, 2, 3, 4); // id = 4
Person p4 = {1}; //这种形式也是一种类型的隐式转化
cout << p1.id << ":" << p2.id << ":" << p3.id << endl;
}
/**
* @brief
* 拷贝构造函数的几种写法
*/
void TestPersonCopy() {
Person pp(1, "qiumc");
Person pp1(pp);
Person pp2{pp};
Person pp3 = Person(pp);
Person pp4 = Person{pp};
Person pp5 = {pp};
}
/**
* @brief
* 注意整型数据初始化,和自定义类型初始化,基本上是可以类比的。
*/
int main(int argc, char const* argv[]) { TestPersonSingleParamInit(); }
这篇关于c++构造函数初始化的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!