開発環境
- OS X Mavericks - Apple, ときどき
Windows 8.1 + Cygwin64, MinGW (OS)
- Emacs (CUI)、BBEdit - Bare Bones Software, Inc. (GUI) (Text Editor)
- C++ (プログラミング言語)
- g++(コンパイラ)
C++実践プログラミング (スティーブ オウアルライン (著)、Steve Oualline (原著)、Steve Oualline(原著)、望月 康司(翻訳)、クイープ(翻訳) 、オライリー・ジャパン)のⅣ部(高度なプログラミング概念)の21章(高度なクラス)、21.8(プログラミング実習)、実習 21-1.を解いてみる。
その他参考書籍
- C++プログラミング入門 (グレゴリー サティア (著)、ダウグ ブラウン (著)、Gregory Satir (原著)、Doug Brown (原著)、望月 康司 (翻訳)、谷口 功 (翻訳)、オライリージャパン)
実習 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 コメント:
コメントを投稿