[C++]8.3-8.4 析构函数,复制构造函数(作业)

标题[C++]第八章第三节 构造函数(作业)

看到了就点个赞赞嘛~ ヾ(≧▽≦*)o~

第五周作业

初学C++,想要把每周老师布置的实验题和自己写的程序记录下来,方便期末整理复习,请多多指教!
老师要求用的版本比较老,是Microsoft Visual C++ 2010 Express。

这周学了先补充了之前将指针时没有讲的内存的动态分配和撤销(讲了new运算符和delete运算符),任何讲了 析构函数复制构造函数,老师布置的作业就是把上周的两个题目用新学的内容重新写一遍~
啦啦啦啦啦

第五周实验:把实验12.3.1和12.3.2增加析构函数和复制构造函数实现。在函数中要求提示现在调用什么函数。main函数要能测试所有成员。

1.定义图书类
设图书信息包括书名、作者、出版社和定价等属性,要求定义一个类 ,用该类定义图书对象、
通过函数成员为对象数据成员赋值,能输出图书属性

/*设图书信息包括书名、作者、出版社和定价等属性,要求定义一个类 ,用该类定义图书对象、
通过函数成员为对象数据成员赋值,能输出图书属性。*/

#include<iostream>
#include<string.h>
using namespace std;

class Book
{
private:
	char *Name,*Auth,*Press;
	double Price;
public:
	Book(char *name,char *auth,char *press,double price);
	void Display();
	Book(Book &p);
	~Book()
	{
		if(Name)delete[]Name;
		if(Auth)delete[]Auth;
		if(Press)delete[]Press;
		cout<<"析构函数被调用"<<endl;
	}
};

Book::Book(char *name=0,char *auth=0,char *press=0,double price=0)
{
	Name=new char[strlen(name)+1];
	Auth=new char[strlen(auth)+1];
	Press=new char[strlen(press)+1];
	strcpy(Name,name);strcpy(Auth,auth);
	strcpy(Press,press);
	Price=price;
	cout<<"构造函数被调用"<<endl;
	}

void Book::Display()
{
	cout<<Name<<'\t'<<Auth<<'\t'<<Press<<endl;
	cout<<" 单价为"<<Price<<endl;
}

Book::Book(Book &p)
{
	if(p.Name){
		Name=new char[strlen(p.Name)+1];
		strcpy(Name,p.Name);
	}
	else Name=0;
	
	if(p.Auth){
		Auth=new char[strlen(p.Auth)+1];
		strcpy(Auth,p.Auth);
	}else Auth=0;

	if(p.Press){
		Press= new char[strlen(p.Press)+1];
		strcpy(Press,p.Press);
	}else Press=0;
	Price=p.Price;
    cout<<"复制构造函数被调用"<<endl;
}



void main(void)
{
	char a[40]="《追风筝的人》",b[40]="卡勒德·胡赛尼",c[40]="上海人民出版社";
    double price=27.6;
	Book b1(a,b,c,price),b2(b1);
	b1.Display();
	b2.Display();
	b1.~Book();//显式调用析构函数
	b2.~Book();//同上

	getchar();
	getchar();

}
  

输出内容:

构造函数被调用
复制构造函数被调用
《追风筝的人》 卡勒德·胡赛尼 上海人民出版社
单价为27.6
《追风筝的人》 卡勒德·胡赛尼 上海人民出版社
单价为27.6
析构函数被调用
析构函数被调用

2.定义商品类

设商品包括下列属性:商品名(字符串)、单价(实型)、数量(实型)和金额(实型)。商品的商品名单价属性在定义商品时给定。考虑商品的销售情况,对于某个已定义的商品,给定其数量,应能自动计算出金额。

/*设商品包括下列属性:商品名(字符串)、单价(实型)、数量(实型)和
金额(实型)。商品的商品名和单价属性在定义商品时给定。考虑商品的
销售情况,对于某个已定义的商品,给定其数量,应能自动计算出金额。*/
#include<iostream>
using namespace std;

class item
{
	char *Name;
	double Price;
public:
	double S;
	item(char *a,double b);
	void disp(double c)
	{
		S=Price*c;
		cout<<"商品名:"<<Name<<'\t'<<"单价:"<<Price<<endl;
		cout<<"总价是:"<<S<<endl;
	}
	item(item &p);
	~item(){if(Name)delete[]Name;
	cout<<"调用了析构函数"<<endl;}
};
item::item(char *a,double b)
	{
		Name=new char[strlen(a)+1];
		strcpy(Name,a);
		Price=b;
		cout<<"调用了构造函数"<<endl;
	}
item::item(item &p)
{
	if(p.Name){
		Name=new char[strlen(p.Name)+1];
		strcpy(Name,p.Name);
		Price=p.Price;
		S=p.Price;
	}else Name=0;
	cout<<"调用了复制构造函数"<<endl;
}
 void main()
 {
	 char a[10];
	 double b,n,s;int i;
	 cout<<"请输入商品的名称、单价和数量:"<<endl;
	 cin.getline(a,20);
	 cin>>b>>n;
	 item a1(a,b),a2(a1);
	 a1.disp(n);
	 a2.disp(n);
	 
	 a1.~item();//显式调用析构函数
	 a2.~item();//同上

	 getchar();
	 getchar();
 }

屏幕显示内容:

请输入商品的名称、单价和数量:

输入内容:

牛奶
5
24

输出内容:

调用了构造函数
调用了复制构造函数
商品名:牛奶 单价:5
总价是:120
商品名:牛奶 单价:5
总价是:120
调用了析构函数
调用了析构函数

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值