現在C++の勉強を始めようと思い、いろいろ調べたりしているのですが、いまいちピンときません。
サンプルプログラムを読んでも何だかちんぷんかんぷんです。正直メンバ関数からしてもう怪しいです。
例えば以下の2点間の距離を計算するプログラムCのプログラムをC++にするとどうなるのでしょうか。
解説をつけ加えて頂けると助かります。
C++初心者に対するサンプル
- purin52002
- 記事: 235
- 登録日時: 7年前
- 連絡を取る:
Re: C++初心者に対するサンプル
#include<iostream>//入出力関係のヘッダ
using namespace std;//名前空間stdを省略します
int main()
{
point p1, p2 ;
cout << "始点座標(x y): " << endl ;//printfと同じ感じ、endlはおまじない
cin >> p1.x >> p1.y ;//scanfと同じ感じ
cout << "終点座標(x y): " << endl ;
cin >> p2.x >> p2.y ;
//変数はプログラムの途中でも宣言できる(最近のCでもできるらしいです^^;)
//auto は型を推測してくれる 4文字しか打たなくていいから横着しいの人にはお勧め^^
auto d = calculate_distance(p1, p2) ;
cout << "距離 = " << d ;//%dとか書かなくてもcoutは表示してくれる
}
座標入力をpoint内でやるといいかも?
//c++だとtypedefいらなかったりする
struct point
{
double x ;
double y ;
void Input()
{
cout << "座標(x y): " << endl ;
cin >> this->x >> this->y ;//this->は自分のメンバにアクセスするということ
}
} ;
int main()
{
point p1, p2 ;
p1.Input() ;
p2.Input() ;
auto d = calculate_distance(p1, p2) ;
cout << "距離 = " << d ;//%dとか書かなくてもcoutは表示してくれる
}
c++初心者を自負しています。
質問者さんには今後私にプログラミングを教えてくれるようにやさしく丁寧に教えるつもりです。ぎぶあんどていく^p^
回答者さんには精一杯感謝します。ぎぶおんりー^p^
質問者さんには今後私にプログラミングを教えてくれるようにやさしく丁寧に教えるつもりです。ぎぶあんどていく^p^
回答者さんには精一杯感謝します。ぎぶおんりー^p^
Re: C++初心者に対するサンプル
今クラスおよびメンバ関数を使う練習をしているので、それらを使ったサンプルプログラムにしていただけると助かります。
- purin52002
- 記事: 235
- 登録日時: 7年前
- 連絡を取る:
Re: C++初心者に対するサンプル
ネットではオブジェクト指向最強!だとか、このプログラムはオブジェクト指向になってないから駄目だね^^という記事をよく見かけます。
しかし、オブジェクト指向というのもプログラム手法の一つで、使うと便利な場面、別に使わなくてもいい場面があると私は思っています。
今回は使わなくてもいい場面だと思います。
とりあえずクラスにはまとめてみました。
しかし、オブジェクト指向というのもプログラム手法の一つで、使うと便利な場面、別に使わなくてもいい場面があると私は思っています。
今回は使わなくてもいい場面だと思います。
とりあえずクラスにはまとめてみました。
//c++ではclassもstructも同じ
//デフォルトのメンバ変数の扱いがprivateかpublicかの違い
struct point
{
double x ;
double y ;
void Input()
{
cout << "座標(x y): " << endl ;
cin >> this->x >> this->y ;//this->は自分のメンバにアクセスするということ
}
} ;
struct CalcClass
{
static double calculate_distance(point point1, point point2)
{
return(sqrt((point1.x-point2.x)*(point1.x-point2.x)+(point1.y-point2.y)*(point1.y-point2.y)));
}
};
int main()
{
point p1, p2 ;//pointクラスのp1,p2を宣言
p1.Input() ;//pointクラスのメンバ関数を使用
p2.Input() ;
//CalcClassのメンバ関数を使用
//static修飾子をつけた関数はインスタンス化(実体化)しなくても使用可能
auto d = CalcClass::calculate_distance(p1, p2) ;
cout << "距離 = " << d ;//%dとか書かなくてもcoutは表示してくれる
}
c++初心者を自負しています。
質問者さんには今後私にプログラミングを教えてくれるようにやさしく丁寧に教えるつもりです。ぎぶあんどていく^p^
回答者さんには精一杯感謝します。ぎぶおんりー^p^
質問者さんには今後私にプログラミングを教えてくれるようにやさしく丁寧に教えるつもりです。ぎぶあんどていく^p^
回答者さんには精一杯感謝します。ぎぶおんりー^p^
- purin52002
- 記事: 235
- 登録日時: 7年前
- 連絡を取る:
Re: C++初心者に対するサンプル
クラスの勉強をしているのであれば、分数クラスというのを作ってみてはどうですか?
以前作ったことがあるのですが、結構クラスの基本的な要素が含まれていると思います。
(分数クラスを使う機会があるかは置いといて^^;)
以下仕様になります。
以前作ったことがあるのですが、結構クラスの基本的な要素が含まれていると思います。
(分数クラスを使う機会があるかは置いといて^^;)
以下仕様になります。
- 宣言時に値を代入できる
- 宣言後も値を代入できる
- 入力は
- 整数
- 分子分母
- 入力なしの場合は0にする
- 四則演算ができる(c = a+b ;のような感じ)
- cout << で分数の形で出力できる(a/b と出力)
- 実数値として出力できる
- メンバ変数
- メンバ関数
- operator
- friend関数
c++初心者を自負しています。
質問者さんには今後私にプログラミングを教えてくれるようにやさしく丁寧に教えるつもりです。ぎぶあんどていく^p^
回答者さんには精一杯感謝します。ぎぶおんりー^p^
質問者さんには今後私にプログラミングを教えてくれるようにやさしく丁寧に教えるつもりです。ぎぶあんどていく^p^
回答者さんには精一杯感謝します。ぎぶおんりー^p^
Re: C++初心者に対するサンプル
こんな感じでしょうか?
#include <cstdio>
#include <string>
#include <cmath>
class point {
// メンバ変数
double x;
double y;
public: // これ以降の関数(や変数)を公開する
// コンストラクタ
// 引数を指定しないとデフォルト引数の0に、指定するとその値に初期化する
point(double xvalue = 0, double yvalue = 0) : x(xvalue), y(yvalue) {}
// メッセージを表示して座標を読み込み、その座標を返す
// staticなのでインスタンスが無くても使える
static point read(const std::string& name) {
point result;
printf("%s(x y): ", name.c_str());
// fflushで確実にプロンプトが表示されるようにするべきだと思うが、
// 元のプログラムに合わせて省略
scanf("%lf %lf", &result.x, &result.y);
// scanfの戻り値をチェックして正しく読み込めたか確認するべきだが、
// 元のプログラムに合わせて省略
return result;
}
// この点と他の点の距離を計算する
// 引数リストの後にconstと書くことで、この関数でこのオブジェクトが変更されないことを示す
double calculate_distance(const point& other) const {
return sqrt((x - other.x) * (x - other.x) + (y - other.y) * (y - other.y));
}
};
// C++ではint main(void)もint main()も同じ
int main() {
double d;
point point1, point2;
point1 = point::read("始点座標");
point2 = point::read("終点座標");
d = point1.calculate_distance(point2);
printf("距離 = %.2f\n", d);
return 0;
}
オフトピック
public変数はやめましょうと主張する人もいます。 (ログインしていなくても読める日記です)
個人的には別に使ってもいいと思っていますが、殴られる要素は減らしておくと平和かもしれません。
個人的には別に使ってもいいと思っていますが、殴られる要素は減らしておくと平和かもしれません。
複雑な問題?マシンの性能を上げてOpenMPで殴ればいい!(死亡フラグ)
Re: C++初心者に対するサンプル
>今クラスおよびメンバ関数を使う練習をしているので、それらを使ったサンプルプログラムにしていただけると助かります。
どの処理を何のメンバ関数にしたいのかがよくわからない問題です.
そこらへんのことくらいは説明すべきではないでしょうか.
どの処理を何のメンバ関数にしたいのかがよくわからない問題です.
そこらへんのことくらいは説明すべきではないでしょうか.
class Vec2d
{
public:
double X,Y;
Vec2d( double x=0, double y=0 ) : X(x),Y(y) {}
Vec2d operator-( const Vec2d &rhs ) const { return Vec2d( X-rhs.X, Y-rhs.Y ); }
double L2Norm() const { return sqrt( X*X + Y*Y ); }
};
int main()
{//※面倒なので,入力処理は省略しました
Vec2d a(3,2);
Vec2d b(5,4);
std::cout << (a-b).L2Norm() << std::endl;
std::cin.ignore();
}