⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 bicycle.cpp

📁 C++编程思想电子图书第二版并附有源码。经典不经典大家自己看了。呵呵。
💻 CPP
字号:
//: CXX:Bicycle.cpp {O}

// From Thinking in C++, 2nd Edition

// Available at http://www.BruceEckel.com

// (c) Bruce Eckel 1999

// Copyright notice in Copyright.txt

// Bicycle implementation

#include "Bicycle.h"

#include <map>

#include <algorithm>

#include <cassert>

using namespace std;



// Static member definitions:

LeakChecker BicyclePart::lc;

int Bicycle::counter = 0;



Bicycle::Bicycle() : id(counter++) {

  BicyclePart *bp[] = {

    new Part<Frame>, 

    new Part<Wheel>, new Part<Wheel>, 

    new Part<Seat>, new Part<HandleBar>,

    new Part<Sprocket>,  new Part<Deraileur>,

  };

  const int bplen = sizeof bp / sizeof *bp;

  parts = VBP(bp, bp + bplen);

}



Bicycle::Bicycle(const Bicycle& old) 

  : parts(old.parts.begin(), old.parts.end()) {

  for(int i = 0; i < parts.size(); i++)

    parts[i] = parts[i]->clone();

}



Bicycle& Bicycle::operator=(const Bicycle& old) {

  purge(); // Remove old lvalues

  parts.resize(old.parts.size());

  copy(old.parts.begin(), 

    old.parts.end(), parts.begin());

  for(int i = 0; i < parts.size(); i++)

    parts[i] = parts[i]->clone();

  return *this;

}



void Bicycle::purge() {

  for(VBP::iterator it = parts.begin();

    it != parts.end(); it++) {

      delete *it;

      *it = 0; // Prevent multiple deletes

  }

}



ostream& operator<<(ostream& os, Bicycle* b) {

  copy(b->parts.begin(), b->parts.end(),

    ostream_iterator<BicyclePart*>(os, "\n"));

  os << "--------" << endl;

  return os;

}



void Bicycle::print(vector<Bicycle*>& vb, 

  ostream& os) {

  copy(vb.begin(), vb.end(),

    ostream_iterator<Bicycle*>(os, "\n"));

  cout << "--------" << endl;

} ///:~

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -