//
// Created by lenovo on 2018/5/12.
//
#ifndef PROJECT_1_CLASSIC_H
#define PROJECT_1_CLASSIC_H
#include <cstring>
class cd{
private:
char performers[50];
char label[20];
int selections;
double playtime;
public:
cd(char*s1,char*s2,int n,double x);
cd(const cd& d);
cd();
~cd();
virtual void report() const;
cd& operator=(const cd& d);
};
class classic:public cd{
private:
char projectname[50];
public:
classic(char*s3,char*s2,char*s1,int n,double x):cd(s1,s2,n,x){strcpy(projectname,s3);}
classic(const classic& cs);
classic();
~classic();
void report()const;
classic&operator=(const classic& cs);
};
#endif //PROJECT_1_CLASSIC_H
//
// Created by lenovo on 2018/5/12.
//
#include <iostream>
#include "classic.h"
using namespace std;
cd::cd(char *s1, char *s2, int n, double x) {
performers=s1;
label=s2;
selections=n;
playtime=x;
}
cd::cd(const cd &d) {
performers=d.performers;
label=d.label;
selections=d.selections;
playtime=d.playtime;
}
cd::cd() {}
cd::~cd() {}
void cd::report() const {
cout<<"performers: "<<performers<<endl;
cout<<"labels: "<<label<<endl;
cout<<"selections"<<selections<<endl;
cout<<"playtime"<<playtime<<endl;
}
cd& cd::operator=(const cd &d) {
performers=d.performers;
label=d.label;
selections=d.selections;
playtime=d.playtime;
return *this;
}
classic::classic(const classic &cs) { //直接调用基类复制构造函数即可
projectname=cs.projectname;
cd::cd(cs);
}
void classic::report() const {
cd::report();
cout<<"song_list: "<<projectname;
}
classic& classic::operator=(const classic &cs) { //运算符重载在文件中的定义
projectname=cs.projectname;
cd::operator=(cs);
}
#include <iostream>
#include "classic.h"
void bravo(const cd& disk);
using namespace std;
int main() {
cd c1("beatles","capitol",14,35.5);
classic c2=classic("piano sonata in b flat,pantasia in c",
"alfred brendel","philips",2,57.17);
cd*pcd=&c1;
cout<<"using objective directively:\n";
c1.report();
c2.report();
cout<<"using type cd* pointer to objectives:\n";
bravo(c1);
bravo(c2);
cout<<"tesing assignment: ";
classic copy;
copy=c2;
copy.report();
return 0;
}
void bravo(const cd& disk){
disk.report();
}