2014年4月28日月曜日

開発環境

C++実践プログラミング (スティーブ オウアルライン (著)、Steve Oualline (原著)、Steve Oualline(原著)、望月 康司(翻訳)、クイープ(翻訳) 、オライリー・ジャパン)のⅣ部(高度なプログラミング概念)の21章(高度なクラス)、21.8(プログラミング実習)、実習 21-1.を解いてみる。

その他参考書籍

実習 21-1.

コード(BBEdit, Emacs)

sample435.cpp

#include <iostream>
#include <assert.h>

class check {
protected:
  int total_amount;
public:
  explicit check();
  // check(const check& old_check)
  // ~check()
  // operator = (const check& old_check)
  void add_item(int amount);
  int total();
};

const int QUEUE_SIZE = 100; 

class queue {
protected:
  int count;
  int data[QUEUE_SIZE];
public:
  explicit queue();
  // queue(const queue& old_queue)
  // ~queue()
  // operator = (const queue& old_queue)
  void put(int item);
  int get();
};

class checks : public check, queue {
public:
  void put(int item);
  int get();
  void last_ten_entries();
};

inline void checks::put(int item)
{
  queue::put(item);
  add_item(item);
}

inline int checks::get()
{
  int t = queue::get();
  total_amount -= 1;
  
  return t;
}

inline void checks::last_ten_entries()
{
  int i;
  for (i = count - 1; i > 0 && i > count - 11; --i)
    std::cout << data[i] << ' ';
  std::cout << std::endl;
}

inline check::check()
{
  total_amount = 0;
}

inline void check::add_item(int amount)
{
  total_amount += amount;
}

inline int check::total()
{
  return total_amount;
}

inline queue::queue()
{
  count = 0;
}

inline void queue::put(int item)
{
  assert(count >= 0 && count < QUEUE_SIZE);

  data[count] = item;
  ++count;
}

inline int queue::get()
{
  assert(count >  0 && count < QUEUE_SIZE);

  int t = data[0];
  int i;

  --count;
  for (i = 0; i < count; ++i)
    data[i] = data[i + 1];

  return t;
}

int main(int argc, char *argv[])
{
  checks cs1;
  checks cs2;
  int i;

  for (i = 1; i <= 20; ++i)
    cs1.put(i * i);

  cs1.last_ten_entries();

  for (i = 1; i <= 20; ++i)
    std::cout << cs1.get() << ' ';
  std::cout << std::endl;

  for (i = 1; i <= 10; ++i)
    cs2.put(i * i);
  
  cs2.last_ten_entries();
  
  for (i = 1; i <= 10; ++i)
    std::cout << cs2.get() << ' ';
  std::cout << std::endl;
  
  return (0);
}

Makefile

CC=g++
CFLAGS=-g -Wall
all: sample435_1

sample435_1: sample435_1.cpp
 ${CC} ${CFLAGS} -o sample435_1 sample435_1.cpp

clean:
 rm sample435_1

入出力結果(Terminal)

$ make && ./sample435_1
g++ -g -Wall -o sample435_1 sample435_1.cpp
400 361 324 289 256 225 196 169 144 121 
1 4 9 16 25 36 49 64 81 100 121 144 169 196 225 256 289 324 361 400 
100 81 64 49 36 25 16 9 4 
1 4 9 16 25 36 49 64 81 100 
$

0 コメント:

コメントを投稿