C++中的构造函数

一、C++中 定义默认构造函数的方式有两种

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

eg:   Stock(const char * co="error",int n=0,double pr=0,0);

2) 通过函数重载来定义另一个构造函数——一个没有参数的构造函数(它是默认构造函数的隐式版本):

eg:  Stock();

 

由于一个类只能有一个默认构造函数,因此不能同时采用这两种方式。

 

通常应选第一种初始化所有的对象,以确保所有成员一开始就有已知的,合理的值。

 

当且仅当没有定义任何构造函数时,编译器才会自动提供默认构造函数(没有从参数的隐式版本)。

 

为类定义了构造函数后,就必须为它提供默认构造函数。如果提供了非默认构造函数(如: Stock(const char * co,int n,double pr) ),但没有提供默认构造函数,则声明将出错。

 

二、使用构造函数的方法:

1)显示调用:

eg:Stock food= Stock("world cabbage",250,1.25);

2) 隐式调用:
eg:Stock garment("furry mason",50,2.5);

 

每次创建对象时,C++都要使用类的构造函数来创建对象。下面是构造函数与new一起使用的情况。

Stock * pstock= new Stock ("electroshock games",18,29.4);

 

构造函数不能想其他方法一样,通过类对象来调用:

eg: Stock1.show();

无法使用对象来调用构造函数。因为在构造函数构造出对象之前,对象是不存在的。因此构造函数用来创建对象,而不能通过对象调用。

 

几个编程实例:

 

class Frabjous
{
 private:
char fab[20];
public:
 Frabjous(const char *s="c++") // :fab(s) {}  这里不能这样用初始化列表来初始化fab字符数组,因为fab是数组名,不能再重新赋值。
  {strncpy(fab,s,20-1);fab[20]='\0';}
 virtual void tell() {cout<<fab;}
                                                                                
};
class Gloam
{
private:
 int glip;
 Frabjous fb;
public:
 Gloam(int g=0,const char*s="C++");
 Gloam(int g=0,const Frabjous & f);  //将报错:14-1.h:21: default argument missing for parameter 2 of `Gloam::Gloam(int = 0,
   const Frabjous&)'  
 //Gloam(const Frabjous & f,int g=0);  //用这种方式就没错了。
 void tell();
};


 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值