设为首页 加入收藏

TOP

C++_构造函数与析构函数(二)
2019-03-13 00:08:03 】 浏览:420
Tags:构造 函数
;< endl; return 0; }

2. 成员初始化表

对于常量类型引用类型的数据成员,不能在构造函数中用赋值语句直接赋值,C++提供初始化表进行置初值。

带有成员初始化表的构造函数的一般形式如下:

类名::构造函数名([参数表])[:(成员初始化表)]
{
// 构造函数体
}

成员初始化表的一般形式为:

数据成员名1(初始值1),数据成员名2(初始值2),……

例2.9 成员初始化表的使用
#include<iostream.h>
class A{
public:
    A(int x1):x(x1),rx(x),pi(3.14) // rx(x)相当于rx=x, pi(3.14)相当于pi=3.14
    { }
    void print()
    {cout<<"x="<<x<<" "<<"rx="<<rx<<" "<<"pi="<<pi;}
private:
    int x; int& rx; const float pi;
};
main()
{
    A a(10);
    a.print();
    return 0;
}
  • 构造函数采用成员初始化表对数据成员进行初始化,是一些程序员喜欢使用的方法。
class B{
    int i;
    char j;
    float f;
public:
    B(int I, char J, float F)
    { i=I; j=J; f=F; };
};
class B{
public:
    B(int I,char J,float F):i(I),j(J),f(F)
    { }
private:
    int i;
    char j;
    float f;
};

说明

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

class C{
public:
    C(int I,char Ch,float F,char N[]):i(I),ch(Ch),f(F)
    { strcpy (name,N);}
private:
    int i;
    char ch;
    float f;
    char name[25];
};
  • 类成员是按照它们在类里被声明的顺序初始化的,与它们在初始化表中列出的顺序无关。
【例2.10】
#include<iostream.h>
class D {
public:
    D(int i):mem2(i),mem1(mem2+1)
    {
        cout<<"mem1: "<<mem1<<endl;
        cout<<"mem2: "<<mem2<<endl;
    }
private:
    int mem1;
    int mem2;
};
void main()
{
    D d(15);
}
mem1: -858993459
mem2: 15

3. 缺省参数的构造函数

例2.11
#include<iostream.h>
class Coord {
public:
    Coord(int a=0,int b=0){ x=a; y=b;} // 带有缺省参数的构造函数
    int getx(){ return x; }
    int gety(){ return y; }
private:
    int x,y;
};
void main()
{
    Coord op1(5,6); Coord op2(5); Coord op3;
    int i,j;
    i=op1.getx();j=op1.gety();
    cout<<"op1 i= "<<i<<" op1 j= "<<j<<endl;
    i=op2.getx();j=op2.gety();
    cout<<"op2 i= "<<i<<" op2 j= "<<j<<endl;
    i=op3.getx();j=op3.gety();
    cout<<"op3 i= "<<i<<" op3 j= "<<j<<endl;
}
class Box{
public:
    Box(int h=10,int w=10,int l=10); //在声明构造函数时指定默认参数
    int volume( ){ return(height*width*length); }
private:
    int height;
    int width;
    int length;
};
Box:: Box(int h,int w,int l) //在定义函数时可以不指定默认参数
{
    height=h;
    width=w;
    length=l;
}

4. 重载构造函数

构造函数的重载

在一个类中可以定义多个构造函数,以便对类对象提供不同的初始化的方法,供用户选用。这些构造函数具有相同的名字,而参数的个数或参数的类
型不相同(这称为构造函数的重载)

关于构造函数重载的说明

  • (1) 默认构造函数:一个调用构造函数时不必给出实参的构造函数。 显然,无参的构造函数属于默认构造函数。一个类只能有一个默认构造函数。
  • (2) 尽管在一个类中可以包含多个构造函数,但是对于每一个对象来说,建立对象时只执行其中一个构造函数,并非每个构造函数都被执行。
class Box{
public:
    Box(int h, int w, int l): height(h),width(w),length(l) { }
    Box();
    int volume( );
private:
    int height;
    int width;
    int length;
};
Box::Box()
{
    height = 10;
    width = 10;
    lenght = 10;
}
int Box::volume( )
{
    return height*width*length;
}
int main( )
{
    Box box1; // 书上为 box1();
    cout << box1.volume( ) << endl;
    Box box2(15,30,25);
    cout << box2.volume( ) << endl;
    return 0;
}
例2.17 重载构造函数应用例程。
#include <iostream.h>
class Date{
public:
    Date(); // 无参数的构造函数
    Date(int y,int m,int d); // 带有参数的构造函数
    void showDate();
private:
    int year, month, day;
};
Date::Date()
{ year=1998; month=4; day=28; }
Date::Date( int y, int m, int d)
{ year=y; month=m; day=d; }
inline void Date::showDate()
{ cout<<year<<"."<<month<<".&q
首页 上一页 1 2 3 4 5 6 下一页 尾页 2/6/6
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
上一篇POJ3734 Blocks(生成函数) 下一篇C++_类和对象

最新文章

热门文章

Hot 文章

Python

C 语言

C++基础

大数据基础

linux编程基础

C/C++面试题目