質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
C++

C++はC言語をもとにしてつくられた最もよく使われるマルチパラダイムプログラミング言語の1つです。オブジェクト指向、ジェネリック、命令型など広く対応しており、多目的に使用されています。

Q&A

解決済

3回答

602閲覧

数字の合計を表示させる方法

mol

総合スコア32

C++

C++はC言語をもとにしてつくられた最もよく使われるマルチパラダイムプログラミング言語の1つです。オブジェクト指向、ジェネリック、命令型など広く対応しており、多目的に使用されています。

0グッド

0クリップ

投稿2017/09/03 05:05

編集2017/09/03 13:28

こんにちは。C++で、int a,bにいくつかの数字を入力し、それぞれの合計を表示するプログラムを作りたいのですが、合計を表示させる方法が分かりません。どなたか教えていただけないでしょうか?

###該当のソースコード

C++

1#include <iostream> 2 3class cat 4{ 5public: 6 int a; 7 int b; 8 void dog(); 9}; 10 11void cat::dog() 12{ 13 std::cout << "A =>"; 14 std::cin >> a; 15 16 std::cout << "B =>"; 17 std::cin >> b; 18} 19 20cat obj; 21int main() 22{ 23 int count; 24 std::cout << "回数 =>"; 25 std::cin >> count; 26 27 for (int i = 0; i < count; i++) 28 { 29 obj.dog(); 30 } 31 return 0; 32}

###望ましい結果

三回ループ A =>1 B =>2 A =>4 B =>3 A =>7 B =>8 Aの合計は =>12 Bの合計は =>13

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答3

0

ベストアンサー

C++

1int cat::getSum(void) { 2 return a+b; 3}

cat::dog()で変数cat::sumを計算して、それを返す設計の方が良いのかもしれませんが。
...catクラスにメンバ関数dogがあるのは突っ込んじゃいけないですよね。


覚えていました。

C++

1#include <cstdlib> 2#include <iostream> 3#include <string> 4#include <vector> 5 6namespace py_like_io { 7 template<typename T> 8 T input(const std::string& message) { 9 T ret; 10 std::cout << message; 11 std::cin >> ret; 12 return ret; 13 } 14 15 template<typename T> 16 void print(const T& arg) { 17 std::cout << arg << std::endl; 18 } 19 template<typename First, typename... Rest> 20 void print(const First& first, const Rest&... rest) { 21 std::cout << first << " "; 22 print(rest...); 23 } 24} 25 26namespace mol { 27 28 class Hoge { 29 private: 30 const int hogeA_; 31 const int hogeB_; 32 33 public: 34 Hoge(void) 35 : hogeA_(py_like_io::input<int>("Input a: ")), 36 hogeB_(py_like_io::input<int>("Input b: ")) { 37 } 38 Hoge(int a, int b) 39 : hogeA_(a), hogeB_(b) { 40 } 41 42 inline int getHogeA(void) const noexcept { return hogeA_; } 43 inline int getHogeB(void) const noexcept { return hogeB_; } 44 45 void printInfo(void) const { 46 py_like_io::print(getHogeA(), getHogeB()); 47 } 48 }; 49} 50 51int main(int argc, char** argv) 52{ 53 int count = py_like_io::input<int>("回数 => "); 54 std::vector<mol::Hoge> hogeVec; 55 hogeVec.reserve(count); 56 57 for(int i = 0; i < count; i++) { 58 py_like_io::print("Set params", i, "th Hoge."); 59 hogeVec.emplace_back(mol::Hoge()); 60 } 61 62 int sumA = 0, sumB = 0; 63 for(const auto& hoge: hogeVec) { 64 sumA += hoge.getHogeA(); 65 sumB += hoge.getHogeB(); 66 } 67 py_like_io::print("sumA is", sumA); 68 py_like_io::print("sumB is", sumB); 69 70 return EXIT_SUCCESS; 71}
実行結果 回数 => 3 Set params 0 th Hoge. Input a: 1 Input b: 2 Set params 1 th Hoge. Input a: 4 Input b: 3 Set params 2 th Hoge. Input a: 7 Input b: 8 sumA is 12 sumB is 13

なんかもう好き放題やっています。読み捨ててください。
最近Pythonをよくいじるので、Python-likeなIO関数も勝手に追加。

わからない部分は聞いてください。
また、すごい人にはご批判をいただけるとこちらも勉強になります。

投稿2017/09/03 05:28

編集2017/09/03 14:16
LouiS0616

総合スコア35660

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

mol

2017/09/03 05:38

dogに関してはノーコメントでお願いします(笑) int aの合計とint bの合計を別々に表示させたかったんです。
HogeAnimalLover

2017/09/03 05:39

脱線します。 私もクラス名と関数名は気になりましたが、特に触れませんでした。ちなみに、猫は広義には食肉目の別名でもあるので、「犬は猫の一種である」というのも分類学上は間違いではありません。まあこの場合はメソッドでなくサブクラスになるべきですが。
LouiS0616

2017/09/03 05:43

あ、名実ともにアニマルラヴァーなんですね...!
LouiS0616

2017/09/03 05:48

ちょっと今出先でコードを書ける環境にないため、 帰ったら追記しようと思います。...覚えてればですが...
mol

2017/09/03 05:57

どうか覚えていてください…
mol

2017/09/03 06:05

HogeAnimalLoverさん 関数名dogじゃなくてkittyにしたほうが違和感なかったですね
LouiS0616

2017/09/03 13:35

奇跡的に覚えていたので、追記しました。 0th, 1th, 2th... という完全に間違った英語は仕様です。
mol

2017/09/03 14:17

ありがとうございます! あ、仕様なんですね了解です。:-) 思ったんですが、namespaceとclassの違いは何なのでしょうか?
LouiS0616

2017/09/03 14:20

namespaceは文字通り名前空間です。同名の関数や変数を区別することが出来ます。 これに関しましては、凝れば凝るほどタイプ数が増えるほかは、特にデメリットがないです。 とりあえず付けておけばよいかと。お手製感があるとモチベーションもなんとなく上がります。
LouiS0616

2017/09/03 14:22

classは... 文字通りクラスです。 こいつを扱うときは、オブジェクトの振る舞いにちょっと気をつかわなくてはいけません。 コンストラクタはどうする?メンバ変数のアクセッサは?コピーを許すか?etc.
LouiS0616

2017/09/03 14:24

今回は単に入出力をラップしただけの『関数』を定義したかったので、特にクラスにはしませんでした。 オブジェクトの状態を管理する必要がありませんので。 グローバル関数が許されない言語の場合は、staticメソッドとして定義される類のものかと思います。
guest

0

私の読解力が足りないのでしょうか。

理解しづらいです。

aメンバ変数 と bメンバ変数 の和を求めたいのでしょうか?

それとも表示するだけ?

それとも a,およびbメンバ変数をそれぞれ カウントして最終的に表示する方法でしょうか?

(望ましい)実行結果を提示するとわかりやすいかもしれません。

例えば

ループ回数: ( 3を入力 ) // この部分はfor文によるループ及びカウント // obj.a -> 0 // obj.b -> 0 // obj.a -> 1 // obj.b -> 3 // obj.a -> 2 // obj.b -> 5 結果: obj.a は 2, obj.b は 5 です。

とか。

また、クラス名がcat なのに メンバ関数名がdog って 一瞬マジで意味不明になります。

CreateInstanceっていう関数名なのに createではなく、"Hello" と表示するっていうのと大体同じです。

サンプルだと思うので「ダメ」っていうほどではないですが、回答者には理解しづらいことがあるため、なるべく適切な名前をつけたほうが良いと思います。

投稿2017/09/03 07:11

BeatStar

総合スコア4958

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

mol

2017/09/03 13:23

クラス名とメンバ関数名についてのわかりやすい例えありがとうございます。 catとdogは適当に名付けたものですが、これからはちゃんと考えて名前をつけようと思います!
guest

0

普通に
std::cout << a + b << std::endl;
じゃないの?

投稿2017/09/03 05:25

編集2017/09/03 05:26
HogeAnimalLover

総合スコア4830

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

mol

2017/09/03 05:29

文章が悪かったです、aの合計とbの合計を別々に表示させたかったんです…
HogeAnimalLover

2017/09/03 05:33

それならばcatクラスのオブジェクトをそれだけ作ることがまず必要です。その上で各オブジェクトのa値合計、b値合計をそれぞれ計算することになります。
mol

2017/09/03 05:45

>それならばcatクラスのオブジェクトをそれだけ作ることがまず必要です。  a,bに数字を入力する回数分、オブジェクトを作るということでしょうか?
HogeAnimalLover

2017/09/03 06:00 編集

以下、一例です。動作未確認 //変数countはすでに用意されているとします。  Cat* objs = new Cat[count]; int sum_a = 0, sum_b = 0;   for (int i = 0; i < count; i++) { objs[i].dog(); sum_a += objs[i].a; sum_b += objs[i].b; } std::cout << sum_a << endl << sum_b << endl; delete[] objs;
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問