您的位置:首页 > 编程语言

第十三章编程练习(3)

2016-02-26 15:32 375 查看
brass.h

#pragma once
#ifndef BRASS_H_
#define BRASS_H_
#include <string>
class  Brass{
private:
std::string label;
int rating;
public:
Brass(const std::string l = "null", int r = 0);
Brass(const Brass & r);
virtual void test() = 0 {};//纯虚方法,是定义ABC模型的特征标
virtual ~Brass();
//friend std::ostream & operator<<(std::ostream & os, const Brass & r);
std::string lab() { return label; };
int ra() { return rating; };
virtual void show();
};
class baseDMA :public Brass {
public:
baseDMA(const std::string = "null", int r = 0);
baseDMA(baseDMA & rs);
~baseDMA();
virtual void test() {};
//friend std::ostream &operator<<(std::ostream & os, const baseDMA &rs);
virtual void show();

};
class lacksDMA :public Brass {
private:
std::string color;
public:
lacksDMA(const std::string = "blank", const std::string = "null", int r = 0);
virtual void test() {};
//friend std::ostream & operator<< (std::ostream & os, const lacksDMA & rs);
virtual void show();
};
class hasDMA :public Brass {
private:
std::string style;
public:
hasDMA(const std::string = "none", const std::string = "null", int r = 0);
virtual void test() {};
~hasDMA();
//friend std::ostream & operator<<(std::ostream & os, const hasDMA & hs);
virtual void show();
};
#endif

brass.cpp

#include "brass.h"
#include <iostream>
Brass::Brass(const std::string l, int r)
{
label = l;
rating = r;
}

Brass::Brass(const Brass & r)
{
label = r.label;
rating = r.rating;
}

Brass::~Brass()
{
}

void Brass::show()
{
std::cout<<"label: " << label << "\nrating: "<< rating <<std::endl;
}
void baseDMA::show()
{
std::cout << "baseDMA:\n";
Brass::show();
}
void lacksDMA::show()
{
std::cout << "lacksDMA:\n"
<<"color: " << color << std::endl;
Brass::show();
}
void hasDMA::show()
{
std::cout << "hasDMA:\n"
<< "style: "<< style << std::endl;
Brass::show();
}
baseDMA::baseDMA(const std::string l, int r):Brass(l,r)
{
}

baseDMA::baseDMA(baseDMA & rs):Brass(rs.lab(),rs.ra())
{
}

baseDMA::~baseDMA()
{
}

lacksDMA::lacksDMA(const std::string c, const std::string l, int r):Brass(l,r)
{
color = c;
}

hasDMA::hasDMA(const std::string s, const std::string l, int r):Brass(l,r)
{
style = s;
}

hasDMA::~hasDMA()
{
}


main.cpp

#include "brass.h"
#include <iostream>
#include <cstdlib>
int main()
{
using namespace std;
Brass *pd[3];//虚基类不能创建对象,但可以创建指向其的指针
for (int i = 0; i<3; i++)
{
cout << "Enter the label:";
string label;
getline(cin, label);
cout << "Enter the rating:";
int rat;
cin >> rat;
cout << "Enter the 1 for baseDMA" << endl
<< "2 for lacksDMA" << endl
<< "3 for hasDMA" << endl;
int temp;
(cin >> temp).get();
if (temp == 1)
pd[i] = new baseDMA(label,rat);
else if (temp == 2)
{
cout << "Enter the color:";
string color;
getline(cin, color,'\n');
pd[i]=new lacksDMA (color,label,rat);
}
else if (temp == 3)
{
cout << "Enter the style:";
string style;
getline(cin, style,'\n');
pd[i] = new hasDMA(style,label ,rat);

}
else
{
cout << "invalid input! try again!" << endl;
i--;
}
while (cin.get() != '\n')
continue;
}
cout << endl;
for (int i = 0; i < 3; i++)
pd[i]->show();
for (int i = 0; i < 3; i++)
delete pd[i];
system("pause");
return 0;
}



内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: