构造函数

构造函数:

概念:创建对象时用来初始化对象的函数。

特点:

  1. 构造函数的命名与类名相同
  2. 不能别直接调用,必须通过new运算符在创建对象时才会自动调用
  3. 程序声明对象时,将自动调用构造函数
使用构造函数:

两种方式:

1)显式调用

如:Stock food = Stock("world Cabbage", 250, 1.25);

2)隐式调用

如:Stock garment("world Cabbage", 250, 1.25);相当于:Stock garment = Stock("world Cabbage", 250, 1.25);

3)与new运算符一起使用时

如:Stock *pstock = new Stock("world Cabbage", 250, 1.25);

注意:不能使用对象来调用构造函数,因为在构造函数构造出对象之前,对象是不存在的。即构造函数是用来构造对象的,而不是被对象来调用的。

默认构造函数:

定义:未提供显式初始值的构造函数。

特点:

  • 由C++自动提供。其作用是创建对象,但没初始化它。
  • 当且仅当没有定义任何构造函数时,编译器才会提供默认构造函数。即程序员定义了构造函数后必须定义默认构造函数,否则会出错。这样做的目的是为了防止创建未初始化的对象。
定义默认构造函数方法:有两种

1)给已有构造函数的所有参数提供默认值

如:Stock(const string & co = “Error" , int n = 0, double pr =0.0);

2)通过函数重载定义另一个构造函数

如:Stock();

PS:两种方法不能共存,通常使用第一个,因为第一种可以在对象构造之初其成员就有已知的初始值。

复制构造函数:

概念:由编译器调用,完成基于同一类的其他对象的创建及初始化。其唯一的形参必须是引用

原型:String(const String &other);

调用复制构造函数的时机:

1)一个对象作为函数参数,以值传递的方式传入函数体内;

2)一个对象最为函数返回值,以值传递方式从函数返回;

3)一个对象对另一个对象进行初始化

PS:若前两种情况不使用复制构造函数,对导致一个指针指向 已经被删除的内存空间。对于第三种情况,复制构造函数是由普通构造函数和赋值操作符共同实现的,这也是需要复制构造函数的原因。

PPS:当某对象是按值传递时(无论作为函数参数还是返回值),编译器都会先建立一个此对象的临时拷贝,而在建立该临时拷贝时就会调用类的拷贝构造函数。

默认复制构造函数:

如果在类中没有显式声明一个复制构造函数,编译器会自动生成一个来进行对象之间非static成员的位拷贝。

格式:

声明:

class name

{

public:

name();

name(name & copyname);

……

};

实现:

name::name(name & copyname)

{

……;

}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值