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

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

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

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

目次に戻る


第2章 クラスの定義の基礎

内容
Sample list 2-1 Pointクラスの定義
Sample list 2-2 Pointクラスのメソッドの定義
Sample list 2-3 メイン関数(2-1, 2-2)
Sample list 2-1s クラスヘッダの中にメンバ関数のプログラムを書く
Sample list 2-4 Pointクラスの定義(コンストラクタ)
Sample list 2-5 Pointクラスのコンストラクタの定義
Sample list 2-6 メイン関数(2-4, 2-5)
Sample list 2-7 thisの省略
Sample list 2-8 名簿クラス(クラスの定義)
Sample list 2-9 名簿クラス(プログラムの定義)
Sample list 2-10 メイン関数(2-8, 2-9)
Sample list 2-11 クラス変数
Sample list 2-12 クラス変数の定義
Sample list 2-13 メイン関数(2-11, 2-12)
Sample list 2-14 クラスメンバ関数(staticメンバ関数)の例
Sample list 2-15 クラスメンバ関数の定義
Sample list 2-16 メイン関数(2-14, 2-15)
Sample list 2-17 staticメンバ関数(クラスの定義)
Sample list 2-18 staticメンバ関数(プログラムの定義)
Sample list 2-19 staticメンバ関数の利用

Sample list 2-1 Pointクラスの定義point.h
class Point {
public:
        void set(int, int);
        void show();
private:
        int x, y;
};
Sample list 2-2 Pointクラスのメソッドの定義point.cpp
#include<iostream>
using namespace std;

#include"point.h"

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

void Point::show()
{
        cout << "Point(" << this->x << "," << this->y << ")" <<endl;
}
Sample list 2-3 メイン関数(2-1, 2-2)main.cpp
#include<iostream>
using namespace std;

#include "point.h"

int main()
{
	Point p1, p2;

	p1.set(10,20); p2.set(5,4);
	p1.show();     p2.show();
	
	return 0;
}
Sample list 2-3の実行結果(cygwin)

% c++ -o sample main.cpp point.cpp
% ./sample
Point(10,20)
Point(5,4)

クラスヘッダの中にメンバ関数のプログラムが書ける

クラスヘッダの中にメンバ関数のプログラムを書くことができる(下線部)。短いメンバ関数の場合に便利である。ただし、最初にメンバ変数を定義して おかなければならない。

Sample list 2-1s クラスヘッダの中にメンバ関数のプログラムを書くpoint.h
class Point {
        int x, y; // 最初にメンバ変数を定義。これはprivateとして扱われる。
public:
        void set(int ax, int ay) { this->x = ax; this->y = ay; };
        void show() { cout << "Point(" << x << "," << y << ")" << endl; };
};
Sample list 2-1s、2-3の実行結果(cygwin)

% c++ -o main main.cpp  <--- point.cppをコンパイルしなくてもよい
% ./main
Point(10,20)
Point(5,4)

目次に戻る, 先頭に戻る


Sample list 2-4 Pointクラスの定義(コンストラクタ)point.h
class Point {
public:
	Point();
	Point(int);
	Point(int, int);

	void set(int, int);
	void show();
private:
	int x, y;
};
Sample list 2-5 Pointクラスのコンストラクタの定義point.cpp
#include<iostream>
using namespace std;
#include"point.h"

Point::Point()
{
	this->x = this->y = -1;
}

Point::Point(int ax)
{
	this->x = this->y = ax;
}

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

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

void Point::show()
{
	cout << "Point(" << this->x << "," << this->y << ")" <<endl;
}
Sample list 2-6 メイン関数(2-4, 2-5)main.cpp
#include<iostream>
using namespace std;

#include "point.h"

main()
{
	Point p1, p2(1), p3(2,3);

	p1.show();
	p2.show();
	p3.show();
}
Sample list 2-6の実行結果(cygwin)

% c++ -o sample main.cpp point.cpp
% ./sample
Point(-1,-1)
Point(1,1)
Point(2,3)

目次に戻る, 先頭に戻る


Sample list 2-7 thisの省略point.cpp
#include<iostream>
using namespace std;

#include"point.h"

Point::Point()
{
	x = y = -1;
}

Point::Point(int ax)
{
	x = y = ax;
}

Point::Point(int ax, int ay)
{
	x = ax;
	y = ay;
}

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

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

目次に戻る, 先頭に戻る


Sample list 2-8 名簿クラス(クラスの定義)roll.h
class Roll{
private:
	int id; // 学籍番号
	double height; // 身長
	char *name; // 名前
public:
	Roll(int,double,char *);  // コンストラクタ
	~Roll();  // デストラクタ
	void show();
};
Sample list 2-9 名簿クラス(プログラムの定義)roll.cpp
#include<iostream>
using namespace std;

#include"roll.h"

Roll::Roll(int aid, double aheight, char *aname)
{
	this->id = aid;
	this->height = aheight;
	this->name = new char[ strlen(aname)+1 ];
	if( !this->name )
	{
		fprintf(stderr, "alloc error in iostream");
		exit(1);
	}
	strcpy( this->name, aname );
}

Roll::~Roll()
{
	if( this->name ) delete this->name;
}

void Roll::show()
{
	cout << "id:" << this->id << ", height=" << this->height << ", name=" << this->name << endl;
}
Sample list 2-10 メイン関数(2-8, 2-9)main.cpp
#include<iostream>
using namespace std;

#include "roll.h"

int main()
{
	if( true )
	{
		Roll Urashima( 12345, 170.0, "浦島太郎" );
		Urashima.show();
	}
	return 0;
}
Sample list 2-10の実行結果(cygwin)

% c++ -o roll main.cpp roll.cpp
% ./roll
id:12345, height=170, name=浦島太郎

目次に戻る, 先頭に戻る


Sample list 2-11 クラス変数point.h
class Point {
public:
	Point();
	Point(int, int);
	void show();
private:
	int x,y;
public:
	static int count; // オブジェクトの総数
};
※この例では、クラス変数countをpublicにしていますが、これはあまり望ましいことではありません。
Sample list 2-12 クラス変数の定義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::show()
{
	cout << "Point(" << x << "," << y << "):count=" << count << endl;
}
Sample list 2-13 メイン関数(2-11, 2-12)main.cpp
#include<iostream>
using namespace std;

#include"point.h"

int main()
{
	cout << "Point::count = " << Point::count << endl;

	Point p1,p2;

	p1.show(); p2.show();

	cout << "Point::count = " << Point::count << endl;

	Point p3(4,5), p4(6,7);
	p3.show(); p4.show();
	cout << "Point::count = " << Point::count << endl;

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

% c++ -o samp main.cpp point.cpp
% ./samp
Point::count = 0
Point(0,0):count=2
Point(0,0):count=2
Point::count = 2
Point(4,5):count=4
Point(6,7):count=4
Point::count = 4

目次に戻る, 先頭に戻る


クラスメンバ関数(staticメンバ関数)の例

Sample list 2-14 クラスメンバ関数(staticメンバ関数)の例point.h
class Point {
public:
	Point();
	Point(int, int);
	void show();
	static int getNumber(); // オブジェクトの総数を返す
private:
	int x,y;
	static int count; // オブジェクトの総数
};
Sample list 2-15 クラスメンバ関数の定義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::show()
{
	cout << "Point(" << x << "," << y << "):count=" << count << endl;
}

int Point::getNumber() // staticメンバ関数の定義ではstaticを付けない!
{
	return count;
}
Sample list 2-16 メイン関数(2-14, 2-15)main.cpp
#include<iostream>
using namespace std;

#include"point.h"

int main()
{
	cout << "Point::count = " << Point::getNumber() << endl;

	Point p1,p2;

	p1.show(); p2.show();

	cout << "Point::count = " << Point::getNumber() << endl;

	Point p3(4,5), p4(6,7);
	p3.show(); p4.show();
	cout << "Point::count = " << Point::getNumber() << endl;

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

% c++ -o samp main.cpp point.cpp
% ./samp
Point::count = 0
Point(0,0):count=2
Point(0,0):count=2
Point::count = 2
Point(4,5):count=4
Point(6,7):count=4
Point::count = 4

目次に戻る, 先頭に戻る


staticメンバ関数(静的メンバ関数)

Sample list 2-17 staticメンバ関数point.h
class Point {
private: // このprivate:は省略可能です
	int x, y;
	static int count; // 生成したオブジェクト数
public:
	Point();
	Point( int, int );
	static int getNumber(); // オブジェクトの総数を返す
};
Sample list 2-18 staticメンバ関数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;
}


int Point::getNumber()
{
	return count;
}
Sample list 2-19 staticメンバ関数の利用main.cpp
#include<iostream>
using namespace std;

#include "point.h"

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

	int n = Point::getNumber();

	cout << "生成された点の総数は" << n << "点です。" << endl;

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

% c++ main.cpp point.cpp
% ./a
生成された点の総数は4点です。

目次に戻る, 先頭に戻る


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