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(); }
上一篇:OOP PHP和“获取设置”


下一篇:C#如何从GeckoWebBrowser控件获取cookie