速習 CプログラマのためのC++プログラミング入門 サンプルプログラム集

コンピュータを学習する人の学校:パソコンキャンパス、プログラミングキャンパス

ここでは、 The Office Uchida, School of Computerの e-Learningシステム 「速習 CプログラマのためのC++プログラミング入門」のためのサンプルプログラムを紹介しています。

この中に記載されているプログラムをブラウズあるいはカットアンドペーストしてください。

目次に戻る


第3章 クラスの継承

内容
Sample list 3-1 ベースとなる「点」クラス
Sample list 3-2 「点」のプログラム
Sample list 3-3 メイン関数(3-1, 3-2)
Sample list 3-4 三角形(Tri)クラス
Sample list 3-5 三角形(Tri)クラスの実体
Sample list 3-6 チェック用のメインプログラム(3-4, 3-5)
Sample list 3-7 色付き三角形
Sample list 3-8 色付き三角形の実体
Sample list 3-9 色付き三角形のテストプログラム
Sample list 3-10 テキスト付き色付き三角形
Sample list 3-11 テキスト付き色付き三角形の実体
Sample list 3-12 テキスト付き色付き三角形のテストプログラム

ベースとなるクラス

Sample list 3-1 ベースとなる「点」クラスpoint.h
class Point {
private: // このprivate:は省略可能です
	int x, y;
	static int count; // 生成したオブジェクト数
public:
	Point();
	Point( int, int );
	void set( int, int );
	void print();
	void println();
	void move( int, int );
	static int getNumber(); // オブジェクトの総数を返す
};
Sample list 3-2 「点」のプログラムpoint.cpp
#include<iostream>
using namespace std;

#include"point.h"

int Point::count; // 生成したオブジェクトの総数

Point::Point()
{
	this->x = this->y = 0;
	++count;
}

Point::Point(int ax, int ay)
{
	this->x = ax;
	this->y = ay;
	++count;
}

void Point::set( int ax, int ay )
{
	this->x = ax;
	this->y = ay;
}

void Point::print()
{
	cout << "Point(" << x << "," << y << ")";
}

void Point::println()
{
	cout << "Point(" << x << "," << y << ")" << endl;
}

void Point::move( int shiftx, int shifty )
{
	this->x += shiftx;
	this->y += shifty;
}

int Point::getNumber()
{
	return count;
}
Sample list 3-3 メイン関数(3-1, 3-2)main.cpp
#include<iostream>
using namespace std;

#include "point.h"

int main()
{
	Point p1,p2;
	Point p3(4,5), p4(6,7);

	p1.println(); p2.println();
	p3.println(); p4.println();

	cout << "生成された点の総数は" << Point::getNumber() << "点です。" << endl;

	return 0;
}
Sample list 3-3の実行結果(cygwin)

% c++ -o main main.cpp point.cpp
% ./main
Point(0,0)
Point(0,0)
Point(4,5)
Point(6,7)
生成された点の総数は4点です。

上記のプログラムがうまくコンパイルされない場合、たとえば、「undefined reference to `Point::Point()」 というようなエラーメッセージが表示された場合には、すべてのファイルをコンパイルしているかどうか 確認してください。

目次に戻る, 先頭に戻る


Sample list 3-4 三角形(Tri)クラスtri.h
class Tri
{
protected:
	Point p1, p2, p3;

public:
	Tri();
	Tri(Point, Point, Point);

	void move(int, int);
	void print();
	void println();
};
Sample list 3-5 三角形(Tri)クラスの実体tri.cpp
// Tri(三角形クラス)のメンバ関数の定義
#include<iostream>
using namespace std;

#include "point.h"
#include "tri.h"

Tri::Tri( ) // ディフォルトコンストラクタ
{
	this->p1.set( 0, 0 );
	this->p2.set( 2, 2 );
	this->p3.set( 0, 4 );
}

Tri::Tri( Point ap1, Point ap2, Point ap3 ) // コンストラクタ
{
	this->p1 = ap1;
	this->p2 = ap2;
	this->p3 = ap3;
}

void Tri::move( int shiftx, int shifty ) // 移動
{
	this->p1.move(shiftx, shifty);
	this->p2.move(shiftx, shifty);
	this->p3.move(shiftx, shifty);
}

void Tri::print( ) // 位置の表示
{
	cout << "Tri[";
	this->p1.print();
	this->p2.print();
	this->p3.print();
	cout << "]";
}

void Tri::println( ) // 位置の表示
{
	this->print();
	cout << endl;
}
Sample list 3-6 チェック用のメインプログラムtri_test.cpp
#include <iostream>
using namespace std;

#include "point.h"
#include "tri.h"

int main( )
{
	cout << "*** start test program for Tri class ***" << endl;
	
	Point pnt1( 9, 8 ), pnt2( 3, 3 ), pnt3( 8, 1 );
	Tri t1, t2( pnt1, pnt2, pnt3 );

	t1.println();
	t2.println();

	cout << "*** move triangle object ***" << endl;

	t1.move( 1, 2 );
	t2.move( -1, -2 );

	t1.println();
	t2.println();

	cout << "*** terminate test program for Tri class ***" << endl;

	return 0;
}
Sample list 3-6の実行結果(cygwin)

% c++ -o main tri_test.cpp tri.cpp point.cpp
% ./main
*** start test program for Tri class ***
Tri[Point(0,0)Point(2,2)Point(0,4)]
Tri[Point(9,8)Point(3,3)Point(8,1)]
*** move triangle object ***
Tri[Point(1,2)Point(3,4)Point(1,6)]
Tri[Point(8,6)Point(2,1)Point(7,-1)]
*** terminate test program for Tri class ***

上記のプログラムがうまくコンパイルされない場合、たとえば、「undefined reference to `Point::Point()」 というようなエラーメッセージが表示された場合には、すべてのファイルをコンパイルしているかどうか 確認してください。

目次に戻る, 先頭に戻る


Sample list 3-7 色付き三角形colortri.h
class ColorTri : public Tri
{
protected:
	int colorCode;

public:
	ColorTri();
	ColorTri( Point, Point, Point, int );

	void print();
	void println();
};
Sample list 3-8 色付き三角形の実体colortri.cpp
// ColorTri(色付き三角形クラス)のメンバ関数の定義
#include<iostream>
using namespace std;

#include "point.h"
#include "tri.h"
#include "colortri.h"

ColorTri::ColorTri( ) // ディフォルトコンストラクタ
{
	// ここで、Tri(三角形クラス)のデフォルトコンストラクタが自動的に呼ばれる
	this->colorCode = 0; // 色コードをセット
}

ColorTri::ColorTri( Point ap1, Point ap2, Point ap3, int aCD ) // コンストラクタ
                             : Tri( ap1, ap2, ap3 )
                          //    ↑
                          // このコンストラクタを呼ぶことを明示している
{
	this->colorCode = aCD; // 色コードをセット
}

void ColorTri::print( ) // 位置の表示
{
	cout << "ColorTri[";
	this->Tri::print(); // Tri(三角形クラス)のprintメンバ関数を呼ぶ
	cout << ",Color:" << this->colorCode << "]";
}

void ColorTri::println( ) // 位置の表示
{
	this->print();
	cout << endl;
}
Sample list 3-9 色付き三角形のテストプログラムcolortri_test.cpp
#include <iostream>
using namespace std;

#include "point.h"
#include "tri.h"
#include "colortri.h"


int main( )
{
	cout << "*** start test program for ColorTri class ***" << endl;
	
	Point pnt1( 9, 8 ), pnt2( 3, 3 ), pnt3( 8, 1 );
	ColorTri t1, t2( pnt1, pnt2, pnt3, 10 );

	t1.println();
	t2.println();

	cout << "*** move triangle object ***" << endl;

	t1.move( 1, 2 );
	t2.move( -1, -2 );

	t1.println();
	t2.println();

	cout << "*** terminate test program for ColorTri class ***" << endl;

	return 0;
}
Sample list 3-9の実行結果(cygwin)

% c++ colortri_test.cpp colortri.cpp tri.cpp point.cpp
% ./a
*** start test program for ColorTri class ***
ColorTri[Tri[Point(0,0)Point(2,2)Point(0,4)],Color:0]
ColorTri[Tri[Point(9,8)Point(3,3)Point(8,1)],Color:10]
*** move triangle object ***
ColorTri[Tri[Point(1,2)Point(3,4)Point(1,6)],Color:0]
ColorTri[Tri[Point(8,6)Point(2,1)Point(7,-1)],Color:10]
*** terminate test program for ColorTri class ***

上記のプログラムがうまくコンパイルされない場合、たとえば、「undefined reference to `Point::Point()」 というようなエラーメッセージが表示された場合には、すべてのファイルをコンパイルしているかどうか 確認してください。

目次に戻る, 先頭に戻る


Sample list 3-10 テキスト付き色付き三角形textcolortri.h
class TextColorTri : public ColorTri
{
protected:
	string text;
	Point  pos_text;

public:
	TextColorTri();
	TextColorTri( Point, Point, Point, int, string, Point );

	void move( int, int );

	void print();
	void println();
};
Sample list 3-11 テキスト付き色付き三角形textcolortri.cpp
// ColorTri(色付き三角形クラス)のメンバ関数の定義
#include<iostream>
#include<string>
using namespace std;

#include "point.h"
#include "tri.h"
#include "colortri.h"
#include "textcolortri.h"

TextColorTri::TextColorTri( ) // ディフォルトコンストラクタ
{
	// ここで、ColorTri(色付き三角形クラス)のデフォルトコンストラクタが自動的に呼ばれる
	this->text = "無題"; // テキスト初期値をセット
	this->pos_text.set( 0, 0 ); // そのテキストの位置
}

TextColorTri::TextColorTri( Point ap1, Point ap2, Point ap3, int aCD, string atext, Point pos ) // コンストラクタ
                             : ColorTri( ap1, ap2, ap3, aCD )
                          //    ↑
                          // このコンストラクタを呼ぶことを明示している
{
	this->text = atext; // テキストをセット
	this->pos_text = pos;
}

void TextColorTri::move( int shiftx, int shifty )
{
	this->ColorTri::move( shiftx, shifty );
	this->pos_text.move( shiftx, shifty );
}

void TextColorTri::print( ) // 位置の表示
{
	cout << "TextColorTri[";
	this->ColorTri::print(); // ColorTri(三角形クラス)のprintメンバ関数を呼ぶ
	cout << ",text:" << this->text << ",";
	this->pos_text.print();
	cout << "]";
}

void TextColorTri::println( ) // 位置の表示
{
	this->print();
	cout << endl;
}
Sample list 3-12 テキスト付き色付き三角形のテストプログラムtextcolortri_test.cpp
#include <iostream>
#include <string>
using namespace std;

#include "point.h"
#include "tri.h"
#include "colortri.h"
#include "textcolortri.h"

int main( )
{
	cout << "*** start test program for TextColorTri class ***" << endl;
	
	Point pnt1( 9, 8 ), pnt2( 3, 3 ), pnt3( 8, 1 ), pnt4( 5, 3 );
	TextColorTri t1, t2( pnt1, pnt2, pnt3, 10, "赤い三角形", pnt4 );

	t1.println();
	t2.println();

	cout << "*** move triangle object ***" << endl;

	t1.move( 1, 2 );
	t2.move( -1, -2 );

	t1.println();
	t2.println();

	cout << "*** terminate test program for TextColorTri class ***" << endl;

	return 0;
}
Sample list 3-12の実行結果(cygwin)

% c++ textcolortri_test.cpp textcolortri.cpp colortri.cpp tri.cpp point.cpp
% ./a
*** start test program for TextColorTri class ***
TextColorTri[ColorTri[Tri[Point(0,0)Point(2,2)Point(0,4)],Color:0],text:無題,Point(0,0)]
TextColorTri[ColorTri[Tri[Point(9,8)Point(3,3)Point(8,1)],Color:10],text:赤い三角形,Point(5,3)]
*** move triangle object ***
TextColorTri[ColorTri[Tri[Point(1,6)Point(3,4)Point(1,6)],Color:0],text:無題,Point(1,2)]
TextColorTri[ColorTri[Tri[Point(8,6)Point(2,1)Point(7,-1)],Color:10],text:赤い三角形,Point(4,1)]
*** terminate test program for TextColorTri class ***

上記のプログラムがうまくコンパイルされない場合、たとえば、「undefined reference to `Point::Point()」 というようなエラーメッセージが表示された場合には、すべてのファイルをコンパイルしているかどうか 確認してください。

目次に戻る, 先頭に戻る


Copyright (c) 2006 Satoshi Uchida, The Office Uchida, School of Computer