构造函数

4.2.1默认构造函数
在C++中,有一种特殊的成员函数,它的名字和类名相同,没有返回值,不需要用户显式调用(用户也不能调用),而是在创建对象时自动执行。这种特殊的成员函数就是 构造函数(Constructor)
一个类必须有构造函数,要么用户自己定义,要么编译器自动生成。一旦用户自己定义了构造函数,不管有几个,也不管形参如何,编译器都不再自动生成。
最后需要注意的一点是,调用没有参数的构造函数也可以省略括号
一旦程序定义了自己的构造函数,系统就不再提供默认构造函数
使用给定的值对函数进行初始化
(1)与类同名
(2)可以重参可代不,不代参
(3)无壳用户调用一般自己
4.2.2定义构造函数
1.构造函数的定义和使用方法
指定构造函数的名称与类名一致,且这个函数没有返回值以及不能指定返回类型
类可以有多个构造函数,在类体里的声明形式如下:
类名(形参1,形参 2,…,形参n );//可以没有参数
类的构造函数可以在类体内(内联函数)声明时定义,也可以在类体外定义。可以使用初始化列或者在构造函数的函数体内定义。
类名::类名(形参1,形参 2,…形参 n):x1(形参 1),x2(形参2),…,xn(形参n){}
{
          x1=形参1;
          x2=形参2;
          ……
          xn=形参n;
}
当声明一个外部对象时,外部对象只是引用在其他地方声明的对象,程序并不为外部对象说明调用构造函数。如果是全局对象,在卖弄函数执行之前要调用它们的构造函数
构造函数必须是 public 属性的,否则创建对象时无法调用。当然,设置为 private、protected 属性也不会报错,但是没有意义。
构造函数没有返回值,因为没有变量来接收返回值,即使有也毫无用处,这意味着:
  • 不管是声明还是定义,函数名前面都不能出现返回值类型,即使是 void 也不允许;
  • 函数体中不能有 return 语句。
2.自动调用构造函数
4.2.3构造函数和运算符new
运算符new用于键生存期可控的对象,new返回这个对象的指针。由于类名被视为一个类型名,因此,使用new建立动态对象的语法和建立动态变量的情况类似,其不同点是new
和构造函数一同起作用

4.2.4构造函数的默认参数
4.2.5复制构造函数
引用在类中一个很重要的用途是用在复制构造函数中。通常用于使用已有的对象来建立一个新对象。
复制构造函数原型: A::A(A&)
对定义了复制构造函数,原型:point(point&),它的定义如下:
point::point(point&t)
{x=t.x;y=t.y;}
在c++中,在一个类中定义的成员函数可以访问该类任何对象的私有成员。这个函数具有特殊的作用:在使用该类的一个对象初始化该类的另一个对象时,调用这个函数。例如:
point obj1(25,52);
pointt obj2(obj1);

构造函数的重载

和普通成员函数一样,构造函数是允许重载的。一个类可以有多个重载的构造函数,创建对象时根据传递的实参来判断调用哪一个构造函数。

构造函数的调用是强制性的,一旦在类中定义了构造函数,那么创建对象时就一定要调用,不调用是错误的。如果有多个重载的构造函数,那么 创建对象时提供的实参必须和其中的一个构造函数匹配;反过来说,创建对象时只有一个构造函数会被调用
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值