この問題を解くためには… |
→ 基本編第7日目参照 |
---|
問題7:ポリモーフィズム
prob7-1.(難易度★)
以下のプログラムは、回数をカウントするカウンター(Counter)クラスと、それを利用したプログラムである。Counterクラスに、引数付きのcount()メソッドを新たに追加し、以下のプログラムを完成させなさい。
prob7-1:counter.h#ifndef _COUNTER_H_ #define _COUNTER_H_ // カウンタークラス class Counter{ private: // カウント int m_count; public: // コンストラクタ Counter(); // カウンタをリセット void reset(); // カウントされた回数を取得 int getCount(); // 1ずつカウント void count(); }; #endif // _COUNTER_H_
#include "counter.h" // コンストラクタ Counter::Counter() : m_count(0) { } // カウンタをリセット void Counter::reset() { m_count = 0; } // 回数を取得 int Counter::getCount() { return m_count; } // 1ずつカウント void Counter::count() { m_count++; }
#include <iostream> #include "counter.h" using namespace std; int main(){ // カウンタを生成 Counter* pC = new Counter(); pC->count(); // 1回カウント pC->count(); // 1回カウント cout << "回数:" << pC->getCount() << "回" << endl; pC->count(4); // 4回カウント cout << "回数:" << pC->getCount() << "回" << endl; // カウンタをリセット pC->reset(); cout << "回数:" << pC->getCount() << "回" << endl; // カウンタを消去 delete pC; return 0; }
期待される実行結果
回数:2回
回数:6回
回数:0回
追加するcountメソッドの概要
回数:6回
回数:0回
関数名 | 戻り値の型 | 引数 | 概要 |
---|---|---|---|
count | void | int型 | 与えた引数の数だけ、回数をカウントする |
prob7-2.(難易度★)
以下のプログラムは、2次元のベクトル(Vector)クラスと、それを使用したサンプルのプログラムである。Vectorクラスに、指定された仕様の引数つきのコンストラクタを追加し、プログラムを完成させなさい。
prob7-2:vector.h#ifndef _VECTOR_H_ #define _VECTOR_H_ // ベクトルクラス class Vector{ private: double m_x; double m_y; public: // コンストラクタ Vector(); // 成分の設定 void set(double x, double y); // x成分の取得 double getX(); // y成分の取得 double getY(); }; #endif // _VECTOR_H_
#include "vector.h" // コンストラクタ Vector::Vector() : m_x(0), m_y(0) { } // 成分の設定 void Vector::set(double x, double y) { m_x = x; m_y = y; } // x成分の取得 double Vector::getX() { return m_x; } // y成分の取得 double Vector::getY() { return m_y; }
#include <iostream> #include "vector.h" using namespace std; int main(){ Vector *v1, *v2; // 引数なしのコンストラクタで生成 v1 = new Vector(); // 引数つきのコンストラクタで生成 v2 = new Vector(1.1, 2.3); v1->set(3.8, 2.7); cout << "v1 =(" << v1->getX() << " , " << v1->getY() << ")" << endl; cout << "v2 =(" << v2->getX() << " , " << v2->getY() << ")" << endl; delete v1; delete v2; return 0; }
v1 =(3.1 , 2.7)
v2 =(1.1 , 2.3)
追加するVectorクラスのコンストラクタの概要
v2 =(1.1 , 2.3)
関数名 | 戻り値の型 | 引数 | 概要 |
---|---|---|---|
Vector | なし | double型×2 | 与えた引数を、m_x、m_yに代入 |