漫漫编程路——C++篇(三)——关于构造函数和析构函数

构造函数是在类的使用中都会使用的一个函数,它很特殊(相对一般的成员函数来说),一般推荐构建类了还是使用构造函数,特别是跟现实相关的时候,构造函数 能是你的类跟符合实际,进而让你的程序更有可读性,而析构函数同样也是特殊的,但一般没有在类中使用指针,引用或者其他妨碍深度拷贝的情况时,是使用系统 默认的拷贝函数的,但是当你遇到上述的情况时,你就要自定义析构函数了,而且析构函数能释放你在使用完对象后,对象里可能使用过而不能被默认析构函数析构 的空间,小程序还好,但是当你写较大程序时,你不这样做,你的程序将一步一步蚕食你的运行内存,这是可以避免的,因此用好这两种函数也是必须的。
例题:

以下是商品类Goods的定义,但没有类的实现部分,请根据类的定义编写类的实现部分的代码,并编写相应的对所定义的类进行测试的程序。
Class Goods
{
    private:
        static int totalWeight;
        int weight;
    public:
        Goods (int w);
        int get();
        static int GetTotal();
        ~ Goods ();
}
解析:说实话,这道题目并不好,因为它只考察了构造函数,没考察析构函数,这里的析构函数根本就是鸡肋,可有可无,浪费我们的时间和体力,但是我懒得找其他的例题,只能使用手头上的实验题了,人懒没办法啊
程序:
#include<iostream>
using namespace std;
typedef void (*M)();
void f(){
cout<<"1.增加商品重量"<<'/n';
cout<<"2.显示当前商品总重量"<<'/n';
cout<<"3.退出"<<'/n';
cout<<"请选择···";
}
class Goods
{
    private:
        static int totalWeight;
        int weight;
    public:
        Goods(int w){
        weight=w;
        totalWeight+=w;
        }
        int get(int a);
        static int GetTotal(){
        return totalWeight;
       
        }
        ~ Goods(){cout<<"析构函数输出商品总重量为"<<totalWeight<<'/n';}
};
int Goods::totalWeight=0;

int Goods::get(int a){
    if(a>0)
    {weight=a;
totalWeight+=weight;
    }
    else
    cout<<"对不起,您输入的数据有误!"<<'/n';
    return 1;
};

void main(){
    M n;
    n=f;
    int a,b,choice;
    cout<<"请输入最初商品重量:";
    cin>>a;
Goods m(a);
while(m.GetTotal()<=100){
f();
cin>>choice;
switch(choice){
case 1:cout<<"请输入增加的商品重量:";
cin>>b;
m.get(b);break;
case 2:cout<<"当前商品的总重量为:";
cout<<m.GetTotal()<<'/n';break;
case 3:break;
default:cout<<"对不起,您的选择是错误的,请重新选择!"<<'/n';break;
}
}
}
同 样,红字部分比较关键,要注意的是,循环的时候只用结束退出循环,使用完对象后析构函数才能出来,如果你一直让对象存留在循环中的时候,析构函数是无法实 现的,我为了使用菜单,才使用了while,但我又限定了一个重量,这也是我自认为我这个程序的可爱之处,因为这样更符合实际,你看到过一辆货车能无限装 货吗?你看到我飞机运送万吨石油吗?这里没有玄幻小说中的无限空间袋,因此在这里设定一个限制是有必要的,在这个限制下你可以无限次增加重量,只要不超过 限定额就可以了,超过了以后就会调用析构函数了。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值