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();
}

猜你喜欢

转载自blog.csdn.net/wode_0828/article/details/108691385