标题[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
调用了析构函数
调用了析构函数