C++的构造函数们

1.什么是构造函数?

一种特殊的成员函数,创建一个对象时,系统需要调用对象的构造函数进行初始化,类似于OC的init方法

2.构造函数的特点

  1. 函数名与类名一样,书写格式:类名(参数列表)
  2. 没有返回值,加上void也不行
  3. 每个类都有一个默认的公共的无参构造函数,但只要额外增加了一个构造函数,系统将不提供默认的空构造函数
  4. 构造函数可以重载,也就是说,可以提供多个构造函数

3.构造函数的其他知识点
如果对象是一个全局变量,那么它的构造函数调用会先于main函数

 

4.什么是转换构造函数

  1. 带有一个参数的构造函数
  2. 可以将其他类型的数值转为对象

例如:Person p(20);//前提是需要提供下面的构造函数
直接调用转换构造函数:Person(int age)

如果是一下代码需要分情况讨论

Person p;

p = 30;

如果Person类重载了=(int)运算,第二句代码会直接用重载过的运算符进行运算

如果没有重载,则::先隐式调用转换构造函数:Person(int age)产生一个临时的Person对象,再将临时对象赋值给p{实现是调用operator=(const Person& other)函数

执行语句:Person temp(30);p.operator = (temp);

}

-------这种情况下会调用两次构造函数,第一句调用空构造函数,第二句调用转换构造函数,这种调用称为隐式调用

5.如何阻止转换构造函数的隐式调用?

只需要在声明只有一个参数的构造函数上加上explicit关键字(明显的)例如:

explicit Person(int age);

 

 

P.S.--C++创建对象数组和释放对象数组的一些问题

Person persons[2] = {20,30}; //会调用两次转换构造函数

Person *persons = new Person[2];//persons指向数组的第一个元素

Person *persons = new Person[2]{20,30};跟上面一条语句一样,多了调用转换构造函数的过程

第一种创建方法创建出来的对象数组在栈里面,不需要我们手动管理,第二\三种方发创建的对象在堆里,需要手动释放

而且释放对象数组的时候,应该用指向首元素的指针去释放,跟释放对象不一样,还要加上方括号,例如:

delete [] persons;

C++的构造函数们,布布扣,bubuko.com

C++的构造函数们

上一篇:java编码问题总结


下一篇:从输入URL到页面渲染完成