開発環境
- 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(原著)、望月 康司(翻訳)、クイープ(翻訳) 、オライリー・ジャパン)のⅣ部(高度なプログラミング概念)の18章(演算子のオーバーロード)、18.6(プログラミング実習)、実習 18-2.を解いてみる。
その他参考書籍
- C++プログラミング入門 (グレゴリー サティア (著)、ダウグ ブラウン (著)、Gregory Satir (原著)、Doug Brown (原著)、望月 康司 (翻訳)、谷口 功 (翻訳)、オライリージャパン)
実習 18-2.
コード(BBEdit, Emacs)
sample372_2.cpp
#include <iostream> #include <cstring> class simple_array { private: int nums[100][2]; int count; static int zero; public: simple_array() { std::memset(nums, -1, sizeof(nums)); count = -1; } // simple_array(const simple_array& old_simple_array); // ~simple_array(); // simple_array operator = (const simple_array& old_simple_array); int& operator [] (int key) { if (key < 0 || key > 1000000) { std::cerr << "index error:" << key << '\n'; exit(8); } int *key_ptr = &nums[0][0]; for (; key_ptr <= &nums[99][1]; key_ptr += 2) if (*key_ptr == key) { return *(key_ptr + 1); } if (count < 99) { ++count; nums[count][0] = key; return nums[count][1]; } return zero; } void p() { int i; int j; for (i = 0; i < 100; ++i) std::cout << '(' << nums[i][0] << ',' << nums[i][1] << ")\n"; } }; int simple_array::zero = 0; int main(int argc, char *argv[]) { simple_array array; int i; for (i = 0; i < 100; ++i) array[i*5] = i * i; array.p(); std::cout << "array[0] = " << array[0] << '\n'; std::cout << "array[1] = " << array[1] << '\n'; std::cout << "array[9] = " << array[9] << '\n'; std::cout << "array[10] = " << array[10] << '\n'; std::cout << "array[11] = " << array[11] << '\n'; std::cout << "array[104] = " << array[104] << '\n'; std::cout << "array[105] = " << array[105] << '\n'; std::cout << "array[106] = " << array[106] << '\n'; std::cout << "array[495] = " << array[495] << '\n'; std::cout << "array[496] = " << array[496] << '\n'; std::cout << "array[1000] = " << array[1000] << '\n'; std::cout << "array[1000000] = " << array[1000000] << '\n'; return (0); }
Makefile
# # FSFのg++コンパイラ用のMakefile # CC=g++ CFLAGS=-g -Wall all: sample372_2 sample372_2: sample372_2.o ${CC} ${CFLAGS} -o sample372_2 sample372_2.o sample372_2.o: sample372_2.cpp ${CC} -c -o sample372_2.o sample372_2.cpp clean: rm sample372_2
入出力結果(Terminal)
$ make && ./sample372_2 g++ -c -o sample372_2.o sample372_2.cpp g++ -g -Wall -o sample372_2 sample372_2.o (0,0) (5,1) (10,4) (15,9) (20,16) (25,25) (30,36) (35,49) (40,64) (45,81) (50,100) (55,121) (60,144) (65,169) (70,196) (75,225) (80,256) (85,289) (90,324) (95,361) (100,400) (105,441) (110,484) (115,529) (120,576) (125,625) (130,676) (135,729) (140,784) (145,841) (150,900) (155,961) (160,1024) (165,1089) (170,1156) (175,1225) (180,1296) (185,1369) (190,1444) (195,1521) (200,1600) (205,1681) (210,1764) (215,1849) (220,1936) (225,2025) (230,2116) (235,2209) (240,2304) (245,2401) (250,2500) (255,2601) (260,2704) (265,2809) (270,2916) (275,3025) (280,3136) (285,3249) (290,3364) (295,3481) (300,3600) (305,3721) (310,3844) (315,3969) (320,4096) (325,4225) (330,4356) (335,4489) (340,4624) (345,4761) (350,4900) (355,5041) (360,5184) (365,5329) (370,5476) (375,5625) (380,5776) (385,5929) (390,6084) (395,6241) (400,6400) (405,6561) (410,6724) (415,6889) (420,7056) (425,7225) (430,7396) (435,7569) (440,7744) (445,7921) (450,8100) (455,8281) (460,8464) (465,8649) (470,8836) (475,9025) (480,9216) (485,9409) (490,9604) (495,9801) array[0] = 0 array[1] = 0 array[9] = 0 array[10] = 4 array[11] = 0 array[104] = 0 array[105] = 441 array[106] = 0 array[495] = 9801 array[496] = 0 array[1000] = 0 array[1000000] = 0 $
0 コメント:
コメントを投稿