What is constructor

  • C++中,如果你想要创建一个object,有一个函数会自动被调用(不需要programmer显式调用 ),这个函数就是constructor;
  • constructor的写法很独特,其function name必须和class name相同;
  • constructor通过arguments上的差异进而形成ctor的overloading,当然和normal function一样,ctor也可以有default arguments;
  • ctor没有返回值类型;
  • ctor还有个特色功能(ctor独享),initialization list(初始化列表)。与在{ ... }内部赋值private data,initialization list速度会更快。简单讲,一个variable数值的设定有2个阶段,分别是initialization和assignment,initialization先于assignment阶段进行。initialization list就是发生在initialization阶段,{ ... }内部赋值private data属于assignment阶段。如果不使用initialization list表明你主动放弃initialization阶段工作,虽然最后你还是把数值放入到variable,但是时间晚了些,效率差了些;

C++——构造函数 constructor

默认实参,构造函数,普通函数都有这种性质。

ctor's overloading

参考:C++——overloading principle analysis

关于header file、static、inline、variable hides的一点感想

我们知道C不允许overloading,C++允许overloading。C++在编译器一侧时别到的函数名与我们看到的函数名是有很大差异的。normal function和ctor的overloading方式差不多。下图事normal function的重载。

 C++——构造函数 constructor

注意:黄色部分①②两个ctor则不可以同时存在,①对于的ctor所有形参都有默认参数,这时候就相当于default ctor,和②是一样的效果。编译器在这种情况下无法做出选择。虽然这也是overloading,但是这种overloading让compiler困惑

常量成员函数

C++——构造函数 constructor

在函数后头加const,表示函数不会改变调用者的内容,或 形参在函数内部不会改变。

如果忘记加const,右下角的例子,c1是个常量,而real和imag却有可能改变c1,产生矛盾,编译器报错。

singleton——把构造函数放在private区

design patrern中 的一种模式

C++——构造函数 constructor

构造函数的作用

①构造对象:在用类定义一个对象时会自动调用构造函数

②初始化对象:类的数据成员往往放在构造函数里面初始化

③类型转换:看讲解

无论C 、C++都是强类型语言,不同类型变量之间不能随便赋值。很多时候我们认为理所当然的赋值都是借助临时变量来实现的。看代码

 1 #include<iostream>
 2 class Test {
 3 public:
 4     Test(int a=0)
 5     {
 6         std::cout << "Create Test Object:" << this<<std::endl;
 7         this->a = a;
 8     }
 9     ~Test()
10     {
11         std::cout << "Free Test Object:" << this << std::endl;
12     }
13 private:
14     int a;
15 };
16 
17 int main(int argc, char **argv)
18 {
19     Test t1;
20     t1 = 100;
21     getchar();
22     return 0;
23 }
View Code

相关文章:

  • 2021-07-14
  • 2022-01-14
  • 2021-12-09
  • 2019-11-05
  • 2021-05-20
  • 2022-12-23
  • 2022-12-23
  • 2022-12-23
猜你喜欢
  • 2021-09-30
  • 2022-02-22
  • 2021-09-02
  • 2021-08-23
  • 2022-12-23
  • 2022-12-23
  • 2021-08-15
相关资源
相似解决方案