p475.2

//头文件:
class Cd{
private:
char *performers;
char *label;
int selections;
double playtime;
public:
Cd(char *s1, char *s2, int n, double x);
Cd(const Cd & st);
Cd();
virtual ~Cd();
virtual void Report()const;
Cd & operator = (const Cd & st);
}; class Classic : public Cd
{
private:
char *production;
public:
Classic(char *s1 = "nullbody1", char *s2 = "nullbody2", char *s3 = "nullbody3", int n = , double x = );
Classic(const Classic & st);
virtual void Report()const;
virtual ~Classic();
Classic & operator=(const Classic & st);
}; //方法:
#include<iostream>
#include<cstring>
#include"classic.h" using std::cout;
using std::endl; Cd::Cd(char *s1, char *s2, int n, double x){
performers = new char[strlen(s1) + ];
strcpy(performers, s1);
label = new char[strlen(s2) + ];
strcpy(label, s2);
selections = n;
playtime = x;
} Cd::Cd(const Cd & st){
performers = new char[strlen(st.performers) + ];
strcpy(performers, st.performers);
label = new char[strlen(st.performers) + ];
strcpy(label, st.label);
selections = st.selections;
playtime = st.playtime;
} Cd::Cd(){
performers = NULL;
label = NULL;
selections = ;
playtime = ;
} void Cd::Report()const{
cout << "performers: " << performers << endl
<< "label: " << label << endl
<< "selections: " << selections << endl
<< "playtime: " << playtime << endl;
} Cd & Cd::operator = (const Cd & st){
if (this == &st)
return *this;
performers = new char[strlen(st.performers) + ];
strcpy(performers, st.performers);
label = new char[strlen(st.performers) + ];
strcpy(label, st.label);
selections = st.selections;
playtime = st.playtime;
return *this;
} Classic::Classic(char *s1, char *s2, char *s3, int n, double x): Cd(s2, s3, n, x){
production = new char[strlen(s1) + ];
strcpy(production, s1);
} Classic::Classic(const Classic & st): Cd(st){
production = new char[strlen(st.production) + ];
strcpy(production, st.production);
} Cd::~Cd(){
delete[]performers;
delete[]label;
} Classic::~Classic(){
delete[]production;
} void Classic::Report()const{
cout << "production: " << production << endl;
Cd::Report();
} Classic & Classic::operator=(const Classic & st){
if (this == &st)
return *this;
Cd::operator=(st);
production = new char[strlen(st.production) + ];
strcpy(production, st.production);
return *this;
} //驱动:
#include<iostream>
#include<cstdlib>
using namespace std;
#include"classic.h"
void Bravo(const Cd & disk); int main(){
Cd c1("Beatles", "Capitol", , 35.5);
Classic c2 = Classic("piano sonata in B flat", "Alfred Brendel", "Philips", , 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(); system("pause");
return ;
} void Bravo(const Cd & disk){
disk.Report();
}

p475.3

 //头文件:
#include<iostream> #ifndef BASE_H_
#define BASE_H_
class baseABC
{
private:
char *label;
int rating;
public:
baseABC(const char *s1="null", int r = );
baseABC(const baseABC &st);
virtual ~baseABC() = ;
baseABC & operator=(const baseABC &rs);
friend std::ostream & operator<<(std::ostream & os, const baseABC & rs);
}; class baseDMA : public baseABC
{
public:
baseDMA(const char *s1="null", int r = );
baseDMA(const baseDMA &st);
baseDMA & operator=(const baseDMA &rs);
friend std::ostream & operator<<(std::ostream & os, const baseDMA & rs);
}; class lacksDMA : public baseABC
{
private:
enum{COL_LEN=};
char color[COL_LEN];
public:
lacksDMA(const char *pt = "blank", const char *ct = "null", int r = );
lacksDMA(const char *pt, const baseABC & st);
friend std::ostream & operator<<(std::ostream & os, const lacksDMA & st);
}; class hasDMA : public baseABC
{
private:
char *style;
public:
hasDMA(const char *pt = "none", const char *ct = "null", int r = );
hasDMA(const char *ct, const baseABC &st);
hasDMA(const hasDMA &st);
virtual ~hasDMA();
hasDMA & operator=(const hasDMA & st);
friend std::ostream & operator <<(std::ostream &os, const hasDMA &st);
}; #endif //方法:
#include<iostream>
#include<cstring>
#include"classic.h" using std::endl; baseABC::baseABC(const char *s1, int r){
label = new char[strlen(s1) + ];
strcpy(label, s1);
rating = r;
} baseABC::baseABC(const baseABC &st){
label = new char[strlen(st.label) + ];
strcpy(label, st.label);
rating = st.rating;
} baseABC::~baseABC(){
delete[]label;
} baseABC & baseABC::operator=(const baseABC &rs){
if (this == &rs)
return *this;
label = new char[strlen(rs.label) + ];
strcpy(label, rs.label);
rating = rs.rating;
return *this;
} std::ostream & operator<<(std::ostream & os, const baseABC & rs){
os << "label: " << rs.label << endl
<< "rating: " << rs.rating << endl;
return os;
} baseDMA::baseDMA(const char *s1, int r): baseABC(s1, r){
} baseDMA::baseDMA(const baseDMA &st): baseABC(st){
} baseDMA & baseDMA::operator=(const baseDMA &rs){
if (this == &rs)
return *this;
baseABC::operator=(rs);
return *this;
} std::ostream & operator<<(std::ostream & os, const baseDMA & rs){
os << (const baseABC &)rs;
return os;
} lacksDMA::lacksDMA(const char *pt, const char *ct, int r): baseABC(ct, r){
strncpy(color, pt, COL_LEN);
color[COL_LEN - ] = '\0';
} lacksDMA::lacksDMA(const char *pt, const baseABC & st): baseABC(st){
strncpy(color, pt, COL_LEN);
color[COL_LEN - ] = '\0';
} std::ostream & operator<<(std::ostream & os, const lacksDMA & st){
os << (const baseABC &)st<<endl
<<"color: "<<st.color;
return os;
} hasDMA::hasDMA(const char *pt, const char *ct, int r): baseABC(ct, r){
style = new char[strlen(pt) + ];
strcpy(style, pt);
} hasDMA::hasDMA(const char *ct, const baseABC &st): baseABC(st){
style = new char[strlen(ct) + ];
strcpy(style, ct);
} hasDMA::hasDMA(const hasDMA &st): baseABC(st){
style = new char[strlen(st.style) + ];
strcpy(style, st.style);
} hasDMA::~hasDMA(){
delete[]style;
} hasDMA & hasDMA::operator=(const hasDMA & st){
if (this == &st)
return *this;
delete[]style;
baseABC::operator=(st);
style = new char[strlen(st.style) + ];
strcpy(style, st.style);
return *this;
} std::ostream & operator <<(std::ostream &os, const hasDMA &st){
os << (const baseABC &)st<<endl
<<"style: "<< st.style << endl;
return os;
} //驱动:
#include<iostream>
#include<cstdlib>
#include"classic.h" const int CLIENTS = ;
const int LEN = ; int main(){
using namespace std;
int i;
baseABC *pt[CLIENTS]; for (i = ; i < CLIENTS; i++){
char temp[LEN];
cout << "enter the label\n";
cin.get(temp, LEN).get();
int r;
cout << "enter the rating\n";
cin >> r;
while (cin.get() != '\n')
continue;
char kind;
cout << "enter 1/2/3 to choice a model to fit baseDMA/lacksDMA/hasDMA\n";
cin >> kind;
while (cin.get() != '\n')
continue;
if (kind == '')
pt[i] = new baseDMA(temp, r);
else if (kind == ''){
char ar[];
cout << "enter a color\n";
cin.get(ar, ).get();
baseDMA test1(temp, r);
pt[i] = new lacksDMA(ar, test1);
}
else if (kind == ''){
char ptr[];
cout << "enter a style\n";
cin.get(ptr, ).get();
pt[i] = new hasDMA(ptr, temp, r);
}
}
for (i = ; i < CLIENTS; i++)
cout << *pt[i] << endl; system("pause");
return ;
}

c++ primer plus 习题答案(8)的更多相关文章

  1. c++ primer plus 习题答案(1)

    c++ primer plus 习题答案用的是第五版,IDE仍然是vs2013.我只标注了题号,具体的题目找下书上对应内容吧. p110.8 #include<iostream> #inc ...

  2. c++ primer plus 习题答案(7)

    p427.4 //头文件: #include<iostream> #ifndef STACK_H_ #define STACK_H_ typedef unsigned long Item; ...

  3. c++ primer plus 习题答案(6)

    p425.1 #include<iostream> #include<cstring> #include<cstdlib> using namespace std; ...

  4. c++ primer plus 习题答案(5)

    p333.7 #include<iostream> #include<cstring> #include<cstdlib> using namespace std; ...

  5. c++ primer plus 习题答案(4)

    p333.3 #include<iostream> #include<cstdlib> #include<cstring> #include<string&g ...

  6. c++ primer plus 习题答案(3)

    p296.3 #include<iostream> #include<cstdlib> #include<string> #include<cstring&g ...

  7. c++ primer plus 习题答案(2)

    p221.8 #include<iostream> #include<cstdlib> #include<cstring> using namespace std; ...

  8. C++Primer第五版——习题答案目录

    目前正在刷<C++Primer>这本书,会在博客上记录课后习题答案,答案仅供参考. 因为水平有限,如有有误之处,希望大家不吝指教,谢谢! 目录地址 使用的系统为:win 10,编译器:VS ...

  9. 《C++Primer》第五版习题答案--第五章【学习笔记】

    <C++Primer>第五版习题答案--第五章[学习笔记] ps:答案是个人在学习过程中书写,可能存在错漏之处,仅作参考. 作者:cosefy Date: 2020/1/15 第五章:语句 ...

随机推荐

  1. 【Windows 8 Store App】学习:目录

    原文http://www.cnblogs.com/java-koma/archive/2013/05/22/3093302.html 写在前面:我之前从事java开发,对MS的一整套东西还没入门哈,难 ...

  2. 看大数据时代下的IT架构(1)业界消息队列对比

    一.MQ(Message Queue) 即 消息队列,一般用于应用系统解耦.消息异步分发,能够提高系统吞吐量.MQ的产品有很多,有开源的,也有闭源,比如ZeroMQ.RabbitMQ. ActiveM ...

  3. [虚拟化/云][全栈demo] 为qemu增加一个PCI的watchdog外设(六)

    目的: 1. 为我们自己的watchdog写一个驱动 步骤: 通过之前的介绍,我们很容易猜想到写我们基于PCI的watchdog驱动,可以分2个步骤. 1. 探测加载PCI设备 这部分代码跟我们的设备 ...

  4. Swift学习之十四:闭包(Closures)

    * 闭包(Closures) * 闭包是自包含的功能代码块,可以在代码中使用或者用来作为参数传值. * 在Swift中的闭包与C.OC中的blocks和其它编程语言(如Python)中的lambdas ...

  5. JS学习笔记(二)运算符和流程控制语句

    js中的运算符和流程控制,循环,判断语句都和C#基本一致,但又有其独特的运算符. typeof运算符 获得数据的数据类型,如number,string等.语法: string typeof(变量); ...

  6. SQL练习之不破坏应用程序现有查询的修改模式

    当我还是一个菜鸟的时候,当然现在也是,当我的软件需求发生变化时,并且数据库设计同样要求发生变化,我通常会放弃原有的代码(或者对原有的代码进行大改),先在我知道了两个不破坏应用程序现有查询的修改模式,下 ...

  7. iOS 模态视图转场的动画效果

    ModalViewController * modalView = [[ModalViewController alloc]init]; modalView.modalTransitionStyle ...

  8. JSONObject put accumulate element 方法区别-------java中

    1.public Object put (Object key, Object value) 将value映射到key下.如果此JSONObject对象之前存在一个value在这个key下,当前的va ...

  9. 最近比较迷flash professional cc 做PPT,做一个flash做动态打字效果的教程

    想做一个flash打字效果.网上的方法要不是太繁琐,要不然就是各种遗漏.在这边做一个行之有效的flash做打字效果教程. 首先我用的是最新版本的flash professional cc .但是应该和 ...

  10. 关于XPath的基本语法

    关于XPath基础语法 关于XPath基础语法 更详细的请看: XPath语法 XPath 使用路径表达式来选取 XML 文档中的节点或节点集.节点是通过沿着路径 (path) 或者步 (steps) ...