C++之构造函数

ps:红色字体为2015/7/11号更新。

构造函数:

一、 作用:给对象分配内存,进行初始化(即对数据成员进行初始化)。

二、性质:(除了具有一般成员函数的特征外)

  第一,构造函数的名字必须与类相同。

  第二,构造函数可以有任意类型的参数,但不能指定返回类型。它有隐含的返回值,该值由系统内部使用。

========

构造函数是不需要指定返回类型的。但是,我们并不是说,构造函数是没有返回值的。就入上面所说,它是有一个隐含的返回值的。

根据下面的blog,我们的结论还是比较明确的:构造函数的返回值为该类的一个对象。。。

http://blog.csdn.net/tangaowen/article/details/1818819


那么对于对于析构函数呢?  我们也是知道的,析构函数也是没有函数的。。

========

  第三,构造函数可以重载,即一个类中可以定义多个参数个数或参数类型不同的构造函数。

  第四,构造函数被声明为公有函数,但是不能像其他成员函数那样被显式地调用,它是在定义对象的同时被调用。

示例:

<span style="font-size:18px;">class Date
{
    private:
    int year,month,day;
    public:
    Date(int y,int m,int d);//构造函数
};

Date::Date(int y,int m,int d)//构造函数的函数体写在了类外
{                            //这个应该是和普通的成员函数一样.
    year=y;
    month=m;
    day=d;
}</span>
三、这样使用构造函数。

  第一,用构造函数直接创建对象。

  类名  对象名(实参表);

  示例:

<span style="font-size:18px;">Date date1(2013,10,29);</span>
  第二,用构造函数new+指针。

  类名  *指针变量 = new 类名(实参表);

  示例

<span style="font-size:18px;">Date *date2=new Date(2013,10,29);</span>
Ps:

  1,构造函数的名字必须与类名相同,否则编译程序会把它当作一般的成员函数来处理。  

  2,构造函数的不能说明它的返回值类型的,甚至为void也不行。

  3,构造函数的可以不带参数的。示例如下

<span style="font-size:18px;">class Date
{
    private:
    int year,month,day;
    public:
    Date();//构造函数
};
Date::Date()
{cout<<"constructing....";}

Date date3;</span>
在定义的date3时,调用构造函数,输出constructing。

四、成员初始化表

  第一,在声明类时,不能再数据成员的声明中对数据成员进行初始化,对数据成员的初始化工作一般在构造函数中用赋值语句进行。

示例:

<span style="font-size:18px;">class Date
{
    private:
    int year=2013,month=10,day=29;
    public:
    Date();//构造函数
};</span>
这种做法是错误的。

  第二,可以用带有成员初始化表的构造函数来进行初始化。

   类名::构造函数名(参数表):成员初始化表

   {  }

示例:

<span style="font-size:18px;">class Date
{
    private:
    int year,month,day;
    public:
    Date(int y,int m,int d):year(y),month(m),day(d)//构造函数
    { }
};

Date date3(2013,10,29);</span>

Ps:

  1,如果需要将数据成员放在堆或者数组中,则应在构造函数中使用赋值语句,即使构造函数有成员初始化表也应该如此。

示例:

<span style="font-size:18px;">const int N=10;
class Stu
{
    private:
    int num,score;
    char name[N],add[N];
    public:
    Stu(int n,int s,char name1[],char add1[]):name(n),score(s)
    {strcpy(name,name1);strcpy(add,add1);}
};</span>
  2,类成员函数是按照他们在类中被声明的顺序进行初始化话的,与他们在成员初始化表中列出的顺序无关。

示例:

<span style="font-size:18px;">class D
{
    private:
    int a,b;
    public:
    D(int x):b(x),a(b+1)
    {cout<<"a="<<a<<",b="<<b<<',';}
};

D d(10);</span>
输出为a=2147323805(乱码),b=10.


以上就是C++中构造函数的基本内容,当然,还有很都的内容有待总结。


  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值