首页 > 代码库 > 构造函数 、析构函数 、拷贝构造函数 ~~~~~~~~~~构造函数

构造函数 、析构函数 、拷贝构造函数 ~~~~~~~~~~构造函数

(一)构造函数

构造函数的作用:实现对数据成员函数的初始化。(因为在声明类时直接赋值是不允许的)。

1.构造函数的使用:

①:没有返回值,没有类型,只是对 对象  进行初始化;

②:构造函数不需要用户调用,也不能被用户调用;系统会自动执行且只执行一次,一般声明为public;

③:可以用类对象初始化另一个对象,例:

rectangle t1;   ///建立对象t1,同时系统会调用构造函数t1.rectangle()
rectangle t2=t1;///建立对象t2,且将t2初始化为t1;

使用的样式:

class rectangle
{
private:
    int l,w;
public:
    rectangle(int a,int b):l(a),w(b){}///构造函数且利用初始化列表进行初始化
};

在类中定义了构造函数 rectangle,它和所在的类同名。在建立对象时自动执行构造函数,根据构造函数rectangle()的定义是将a和b分别赋给 l 和 w ,同样可以在类外定义构造函数,但要加上域限定符"::",比如

class rectangle
{
private:
    int l,w;
public:
    rectangle();///在类中声明构造函数
}
rectangle::rectangle(int a,int b):l(a),w(b){}///构造函数且利用参数初始化列表进行初始化

 

 2.构造函数的类别

①:带参数的构造函数:在调用不同对象时,实现对不同对象赋予不同的初值。

一般形式:

构造函数名(类型1 形参1 ,类型2,形参2)

简例:求给定长和宽的矩形面积,长m,宽n。

#include<iostream>
using namespace std;

class rectangle
{
private:
    int len;
    int wid;
public:
    rectangle(int a,int b);
  //rectangle(int,int);
int area(); }; rectangle::rectangle(int a,int b):len(a),wid(b){} int rectangle::area() { return len*wid; } int main() { int m,n; while(cin>>m>>n){ rectangle A(m,n); cout<<"The rectangle‘s area is:"<<A.area()<<"."<<endl; } return 0; }

 

② 不带参数的

#include<iostream>
using namespace std;

class rectangle
{
private:
    int len;
    int wid;
public:
    rectangle();///声明一个不带形参的构造函数
    rectangle(int a,int b):len(a),wid(b){}///定义一个有参的构造函数
    int area();
};

rectangle::rectangle()
{
    len=10;
    wid=10;
}

int rectangle::area()
{
    return len*wid;
}

int main()
{
    rectangle c;
    cout<<"The rectangle‘s area is:"<<c.area()<<"."<<endl;
    rectangle b(1,2);//传参改变初始化值
    cout<<"The rectangle‘s area is:"<<b.area()<<"."<<endl;

    return 0;
}

 

③含有默认参数的构造函数(本人感觉是以上两种的合体,更好用

简例:求一个长方体的体积,已知长宽高

#include<iostream>
using namespace std;
class cft
{
private:
    int len;
    int wid;
    int hei;
public:

    cft(int a=10,int b=10,int c=10):len(a),wid(b),hei(c){}
    int volum();
};

int cft::volum()
{
    return len*wid*hei;
}

int main()
{
    cft c;///一个参数没变
    cout<<"The cft‘s volum is:"<<c.volum()<<"."<<endl;
    cft b(1,2);///改变两个参数
    cout<<"The cft‘s volum is:"<<b.volum()<<"."<<endl;
    cft d(4,5,6);///三个参数都改变
    cout<<"The cft‘s volum is:"<<d.volum()<<"."<<endl;
    return 0;
}

 

构造函数 、析构函数 、拷贝构造函数 ~~~~~~~~~~构造函数