学习类的抽象——《C++编程风格》读书笔记(一)

一:类的抽象要点

1.将共同的抽象提取出来放到基类。

2.一个类应该描述一组对象。

3.如果派生类之间的区别在于属性,则用数据成员来表示;如果在于行为,则用虚函数来表示。

4.如果通过公有继承来产生派生类,那么这个派生类应该是其基类的特化。

5.多态并不是所有程序设计问题的解决方案。

二:实例

实现一个程序,程序的功能是确定一改计算机中的各种配置的价格。配置一台计算机时,我们需要作出下面两个选择:一个是扩展卡(card),一个是显示器(monitor),扩展卡插槽有三种选择:光驱、磁带机、或者网络接口;显示器有两种选择:单色或者双色。并且考虑这两种部件可能的折扣。

#include 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

你可能感兴趣的:(读书笔记)