c++第十三章第二题2020-09-20

#ifndef cd_H_
#define cd_H_
#include<string>
#include <iostream>
#include <cstring>
#pragma warning(disable:4996)
using std::cout;
class Cd {
private:
 char* performers;
 char* label;
 int selections;
 double playtime;
public:
 Cd(const char* s1, const char* s2, int n, double x);
 Cd();
 virtual~Cd();
 virtual void Report() const;
 Cd& operator=(const Cd& d);
};
class Classic :public Cd
{
private:
 char* works;
public:
 Classic(const char* s1, const char* s2, const char* s3, int n, double x);
 Classic() :Cd() {}
 virtual ~Classic();
 virtual void Report() const;
 Classic& operator=(const Classic& d);
};
#endif // VECTOR_H_
#include<iostream>
#include"diyi.h"
Cd::Cd(const char* s1, const char* s2, int n, double x)
{
 performers = new char[std::strlen(s1) + 1];
 std::strcpy(performers, s1);
 label = new char[std::strlen(s2) + 1];
 std::strcpy(label, s2);
 selections = n;
 playtime = x;
}
Cd::Cd()
{
 performers = 0;
 label = 0;
 selections = 0;
 playtime = 0.0;
}
Cd::~Cd()
{
 delete[]performers;
 delete[]label;
}
void Cd::Report() const
{
 cout << "performers: " << performers << '\n';
 cout << "label: " << label << '\n';
 cout << "selections: " << selections << '\n';
 cout << "playtime: " << playtime << '\n';
}
Cd& Cd::operator=(const Cd& d)
{
 if (this == &d)
  return *this;
 delete[]performers;
 delete[]label;
 performers = new char[std::strlen(d.performers) + 1];
 std::strcpy(performers, d.performers);
 label = new char[std::strlen(d.label) + 1];
 std::strcpy(label, d.label);
 selections = d.selections;
 playtime = d.playtime;
 return *this;
}
Classic::Classic(const char* s1, const char* s2, const char* s3, int n, double x) :Cd(s2, s3, n, x)
{
 works = new char[std::strlen(s1) + 1];
 std::strcpy(works, s1);
}
void Classic::Report() const
{
 cout << "works: " << works << '\n';
 Cd::Report();
}
Classic::~Classic()
{
 delete[]works;
}
Classic& Classic::operator=(const Classic& d)
{
 if (this == &d)
 {
  return *this;
 }
 Cd::operator=(d);
 delete[]works;
 works = new char[std::strlen(d.works) + 1];
 std::strcpy(works, d.works);
 return *this;
}
#include "diyi.h"
using namespace std;
void Bravo(const Cd& disk);
int main()
{
 Cd c1("Beatles", "Capitol", 14, 35.5);
 Classic c2 = Classic("Piano Sonata in B flat, Fantasia in C",
  "Alfred Brendel", "Philips", 2, 57.17);
 Cd* pcd = &c1;
 cout << "Using object directly:\n";
 c1.Report();
 c2.Report();
 cout << "Using type cd * pointer to objects:\n";
 pcd->Report();
 pcd = &c2;
 pcd->Report();
  cout << "Calling a function with a Cd reference argument:\n";
 Bravo(c1);
 Bravo(c2);
 cout << "Testing assignment: ";
 Classic Copy;
 Copy = c2;
 Copy.Report();
 
 return 0;
}

void Bravo(const Cd& disk)
{
 disk.Report();
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值