类和对象第三讲

来源:互联网 发布:医院财务管理优化方案 编辑:程序博客网 时间:2024/05/24 01:40

                                                      类和对象第三讲

还是先来继续介绍构造函数,今天想谈谈带参数的构造函数。例:求一个长宽高分别为(11225,30。(215,30,21.的长方体的体积。

#include <iostream>using namespace std;class box{public:    box(int,int ,int);    void v_box();private:    int h;    int w;    int l;};box::box(int h1,int w1,int l1){    h=h1;    w=w1;    l=l1;}void box::v_box(){    cout<<h*w*l<<endl;}int main(){    box b1(12,25,30);    cout<<"第一个长方体的体积=";    b1.v_box();    box b2(15,30,21);    cout<<"第二个长方体的体积=";    b2.v_box();    return 0;}

由此可知:

(1)带参数的构造函数中的形参,其对应的实参在定义对象时给定。

(2)用这种方法可以方便的实现不同的对象进行不同的初始化。

还可以这么写构造函数:bos ::bos(int h1,int w1,int l1):h(h1),w(w1),l(l1){}

               介绍构造函数的重载

#include <iostream>using namespace std;class box{public:    box();    box(int,int ,int);    void v_box();private:    int h;    int w;    int l;};box::box(){    h=10;    w=10;    l=10;}box::box(int h1,int w1,int l1){    h=h1;    w=w1;    l=l1;}void box::v_box(){    cout<<h*w*l<<endl;}int main(){    box b1;                 //建立对象b1,不指定参数    cout<<"第一个长方体的体积=";    b1.v_box();    box b2(15,30,21);       //建立对象b2,指定3个参数。    cout<<"第二个长方体的体积=";    b2.v_box();    return 0;}

使用默认参数的构造函数

例:将上例中的构造函数改用含默认值的参数,长宽高的默认值均为10

#include <iostream>using namespace std;class box{public:    box(int h=10,int w=10,int l=10);    int v_box();private:    int h1;    int w1;    int l1;};box::box(int h,int w,int l){    h1=h;    w1=w;    l1=l;}int box::v_box(){    return (h1*w1*l1);}int main(){    box b1;                                 //长宽高都是默认值10    cout<<"the volume of b1 is : "<<b1.v_box()<<endl;    box b2(15);                            //长为15,其他为默认值    cout<<"the volume of b2 is : "<<b2.v_box()<<endl;    box b3(15,30);                         //长为15,宽为30,高为默认值    cout<<"the volume of b3 is : "<<b3.v_box()<<endl;    box b4(15,30,20);                      //长15,宽30,高20    cout<<"the volume of b4 is : "<<b4.v_box()<<endl;    return 0;}

需要说明一下几点:

(1)应该在声明构造函数时指定默认值,而不是在定义构造函数时指定默认值。

(2)在声明构造函数时,形参名可以省略。即:box(int =10,int =10,int =10);

(3)一个类只能有一个默认构造函数!也就是说,可以不使用参数而调用的构造函数,一个类只能有一个。

(4)在一个类中定义了全部是默认参数的构造函数后,不能在定义重载构造函数。

比如:

boxint =10,int =10,int 10;    //指定全部为默认参数

box();            //声明无参的构造函数,是重载构造函数

box(int ,int ); //声明有两个参数的构造函数,是重载构造函数

Box b1;                //  是调用第一个还是第二个?

Box b2(15,30);          //  是第一个还是第三个?

                     析构函数

首先,西沟函数是一个特殊的成员函数,他的作用与构造函数想法,他的名字是类名的前面加一个“~”。在C++中“~”是位取反运算符,所以析构函数与构造函数的作用相反。

析构函数的作用不是删除对象,而是在撤销对象占用的内存之前完成一些清理工作。

析构函数不返回任何值,没有函数类型,也没有参数。因为无参数,所以不能被重载。一个类可以有多个析构函数,但是只能有一个构造函数。

析构函数的主要作用是被用户用来执行“用户希望在最后一次石洞对象之后所执行的任何操作”。

举一个包含析构和构造函数的程序。

#include <iostream>#include <cstring>using namespace std;class myclass{public:    myclass(int n,string nam,char s)    {        num=n;        name=nam;        sex=s;        cout<<"构造函数"<<endl;    }    ~myclass()    {        cout<<"学号为"<<num<<"的";        cout<<"析构函数"<<endl;    }    void display();private:    int num;    string name;    char sex;};void myclass::display(){    cout<<"num: "<<num<<endl;    cout<<"name: "<<name<<endl;    cout<<"sex: "<<sex<<endl;}int main(){    myclass m1(10010,"wang_li",'f');    m1.display();    myclass m2(10011,"long_ma",'m');    m2.display();    return 0;}

需要记住的是:先构造的后析构,后构造的先析构。

归纳一下什么时候调用构造函数和析构函数:

(1)构造函数在文件中的所有函数执行之前调用,当main函数执行完毕或调用exit函数时(此时程序终止),调用析构函数。



0 0
原创粉丝点击