一:类的抽象要点
1.将共同的抽象提取出来放到基类。
2.一个类应该描述一组对象。
3.如果派生类之间的区别在于属性,则用数据成员来表示;如果在于行为,则用虚函数来表示。
4.如果通过公有继承来产生派生类,那么这个派生类应该是其基类的特化。
5.多态并不是所有程序设计问题的解决方案。
二:实例
实现一个程序,程序的功能是确定一改计算机中的各种配置的价格。配置一台计算机时,我们需要作出下面两个选择:一个是扩展卡(card),一个是显示器(monitor),扩展卡插槽有三种选择:光驱、磁带机、或者网络接口;显示器有两种选择:单色或者双色。并且考虑这两种部件可能的折扣。
#include <stdio.h>
class Component
{
private:
int price_;
char *name_;
int rebate_;
public:
Component(int p,char *n,int r = 0);
int netPrice();
int price() {return price_;}
char* name() {return name_;}
int rebate() {return rebate_;}
};
Component::Component(int p,char *n,int r)
{
price_ = p;
name_ =n;
rebate_ = r;
}
int Component::netPrice()
{
return price_ - rebate_;
}
class Card:public Component
{
public:
Card(int p,char *n,int r = 45):Component(p,n,r){}
};
class Monitor:public Component
{
public:
Monitor(int p,char *n,int r = 0):Component(p,n,r){}
};
Card Network(600,"Network");
Card CDRom(1500,"CDRom",135);
Card Tape(1000,"Tape");
Monitor Color(1500,"Color");
Monitor Monochrome(500,"Mono");
class Computer
{
Card *card;
Monitor *mon;
public:
Computer(Card*,Monitor*);
int netPrice();
void print();
};
int Computer::netPrice()
{
return mon->netPrice() + card->netPrice();
}
Computer::Computer(Card *c,Monitor *m)
{
card = c;
mon = m;
}
void Computer::print()
{
printf("%s %s,net price = %d/n",card->name(),mon->name(),netPrice());
}
int main()
{
Computer mn (&Network,&Monochrome);
Computer mc(&CDRom,&Monochrome);
Computer mt(&Tape,&Monochrome);
Computer cn(&Network,&Color);
Computer cc(&CDRom,&Color);
Computer ct(&Tape,&Color);
mn.print();
mc.print();
mt.print();
cn.print();
cc.print();
ct.print();
return 0;
}
参考书籍:c++ programming style by Tom Cargill