以下のようなクラスを作り、main関数で呼び出して、動作を確認しなさい。
#include <iostream> class cVec2 { double x_, y_; public: //引数付きコンストラクタ cVec2(double _x, double _y) :x_(_x), y_(_y){} //引数無しコンストラクタ cVec2():x_(0), y_(0){} //セッター、ゲッター void SetXY(double _x, double _y); //ゲッターはそれぞれにしておいて使ったほうがいいよね double GetX(){return(this->x_);}//インライン定義 double GetY(){return(this->y_);}//インライン定義 //メンバをプリントする PrintVec void PrintVec(); //ベクトルのスカラー倍を返す NmulVec関数 cVec2 NmulVec(double _k); //ベクトル同士の足し算を返す NplusVec関数 cVec2 NplusVec(cVec2 _v); //内積を計算して返す Iproduct関数 double Iproduct(cVec2 _v); //ベクトルを座標とみなして2つのベクトルの距離を計算して返すメンバ関数 double DistanceBetweenVectors(cVec2 _v); };
#include "cVec2.h" //セッター、ゲッター void cVec2::SetXY(double _x, double _y) { this->x_ = _x; //メンバ変数なのが分かるようにthisを使っておいた this->y_ = _y; //メンバ変数なのが分かるようにthisを使っておいた } //メンバをプリントする PrintVec void cVec2::PrintVec() { std::cout << "(" << this->x_ << "," << this->y_ << ")" << std::endl; } //ベクトルのスカラー倍を返す NmulVec関数 cVec2 cVec2::NmulVec(double _k) { cVec2 tmp; //作業用変数にメンバ(x, y)のk倍を計算する tmp.SetXY(_k*this->x_, _k*this->y_); return(tmp); } //ベクトル同士の足し算を返す NplusVec関数 //自分と_vを足す cVec2 cVec2::NplusVec(cVec2 _v) { cVec2 tmp; //作業用変数に(x_, y_)+_vを計算する double tx = this->x_ + _v.GetX(); double ty = this->y_ + _v.GetY(); tmp.SetXY(tx, ty); return(tmp); } //内積を計算して返す Iproduct関数 double cVec2::Iproduct(cVec2 _v) { double tmp; //作業用変数に_v1・_v2を計算する tmp = this->x_*_v.GetX() + this->y_*_v.GetY(); return(tmp); } //ベクトルを座標とみなして2つのベクトルの距離を計算して返すメンバ関数 double cVec2::DistanceBetweenVectors(cVec2 _v) { //がんばれー double tmp; //tmp = 2点間の距離 return(tmp); }
#include <iostream> #include "cVec2.h" using std::endl; using std::cout; using std::cin; int main() { cVec2 p(3, 5); p.PrintVec(); //pの4倍 p.NmulVec(4.0); p.PrintVec(); cVec2 p2(-4, 8); cVec2 tmp; tmp = p.NplusVec(p2); tmp.PrintVec(); cout << "内積" << p.Iproduct(p2) << endl; }
#include <iostream> class cPoint { double x_, y_; public: cPoint(double _x, double _y):x_(_x),y_(_y){} cPoint():x_(0),y_(0){} void SetX(double _x){ x_ = _x;} void SetY(double _y){ y_ = _y;} double GetX(){return(x_);} double GetY(){return(y_);} };
#include "cPoint.h" #include <iostream> class cVec2 { // double x_, y_; cPoint p_; //とあるx, yの値を持ったオブジェクト public: //引数付きコンストラクタ //インスタンスイニシャライザで、メンバのクラスのコンストラクタ呼べるよ! cVec2(double _x, double _y) : p_(_x, _y) {} //引数無しコンストラクタ cVec2() : p_(0, 0) {} //セッター、ゲッター void SetXY(double _x, double _y); //ゲッターはそれぞれにしておいて使ったほうがいいよね double GetX() { return (p_.GetX()); } //インライン定義 double GetY() { return (p_.GetY()); } //インライン定義 //メンバをプリントする PrintVec void PrintVec(); //ベクトルのスカラー倍を返す NmulVec関数 cVec2 NmulVec(double _k); //ベクトル同士の足し算を返す NplusVec関数 cVec2 NplusVec(cVec2 _v); //内積を計算して返す Iproduct関数 double Iproduct(cVec2 _v); //ベクトルを座標とみなして2つのベクトルの距離を計算して返すメンバ関数 double DistanceBetweenVectors(cVec2 _v); };
#include "cVec2.h" //セッター、ゲッター void cVec2::SetXY(double _x, double _y) { p_.SetX(_x); //p_.x_に_xをセット p_.SetY(_y); //p_.y_に_yをセット } //メンバをプリントする PrintVec void cVec2::PrintVec() { std::cout << "(" << p_.GetX() << "," << p_.GetY() << ")" << std::endl; } //ベクトルのスカラー倍を返す NmulVec関数 cVec2 cVec2::NmulVec(double _k) { cVec2 tmp; //作業用変数にメンバ(x, y)のk倍を計算する tmp.SetXY(_k*p_.GetX(), _k*p_.GetY()); return(tmp); } //ベクトル同士の足し算を返す NplusVec関数 //自分と_vを足す cVec2 cVec2::NplusVec(cVec2 _v) { cVec2 tmp; //作業用変数に(x_, y_)+_vを計算する double tx = p_.GetX() + _v.GetX(); double ty = p_.GetY() + _v.GetY(); tmp.SetXY(tx, ty); return(tmp); } //内積を計算して返す Iproduct関数 double cVec2::Iproduct(cVec2 _v) { double tmp; //作業用変数に_v1・_v2を計算する tmp = p_.GetX()*_v.GetX() + p_.GetY()*_v.GetY(); return(tmp); } //ベクトルを座標とみなして2つのベクトルの距離を計算して返すメンバ関数 double cVec2::DistanceBetweenVectors(cVec2 _v) { //がんばれー double tmp; //tmp = 2点間の距離 return(tmp); }
#include <iostream> #include "cVec2.h" using std::endl; using std::cout; using std::cin; int main() { cVec2 p(3, 5); p.PrintVec(); cVec2 pzero; pzero.PrintVec(); cVec2 tmp; //pの4倍 tmp = p.NmulVec(4.0); tmp.PrintVec(); cVec2 p2(-4, 8); tmp = p.NplusVec(p2); tmp.PrintVec(); cout << "内積" << p.Iproduct(p2) << endl; }