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

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

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

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

Q&A

解決済

1回答

684閲覧

c++ 添字演算子の実装の仕方

_._._ami

総合スコア26

C++

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

0グッド

0クリップ

投稿2020/08/09 06:56

添字演算子を実装したいのですが, 間違えているところを教えて頂きたいです.
int main()以下は書き換えずに出力が4 4 4 4 4と5行出るようにクラスを完成させるという練習で,自分で書いたのはpublicからクラスの終わりの};までです!
できればその中だけを書き換えたいです.よろしくお願いします.

下記のコードは実行してみたところtoo many errors emitted と出てしまいました...

c++

1#include <iostream> 2#include <string> 3 4using namespace std; 5 6class Dict{ 7 double x[4]; 8public: 9 // 添字演算子を実装せよ.ただし,引数が, 10 // "apple" ならば,x[0], 11 // "orange" ならば x[1], 12 // "beef" ならば x[2], 13 // 上記以外ならば x[3], 14 // の参照を返すようにすること. 15 16 Dict(double& a[string t]) 17 { 18 (*this).a["apple"] = a.["apple"]; 19 (*this).a["orange"] = a.["orange"]; 20 (*this).a["beef"] = a.["beef"]; 21 22 if(t=="apple") return x[0]; 23 if(t=="orange") return x[1]; 24 if(t=="beef") return x[2]; 25 else return x[3]; 26 } 27 28 ~Dict(){ 29 delete[] x[4]; 30 } 31 32 int const &operator[](int index) const{ 33 return x[index]; 34 } 35 int &operator[](int index){ 36 return x[index]; 37 } 38 39 40}; 41 42// 以下が正しい出力である. 43 44// 4 45// 4 46// 4 47// 4 48// 4 49 50int main(){ 51 Dict d; 52 53 d["apple"] = 1; 54 d["orange"] = 2; 55 d["beef"] = 3; 56 d["human"] = 4; 57 for(int i=0;i<10000;++i){ 58 // 拡散方程式.画像をぼかす処理などに使われる.全ての変数の値が適用するたびに徐々に均一になっていく. 59 d["apple"] = d["apple"] + (d["dog"] - 2*d["apple"] + d["orange"])*0.01; 60 d["orange"] = d["orange"] + (d["apple"] - 2*d["orange"] + d["beef"])*0.01; 61 d["beef"] = d["beef"] + (d["orange"] - 2*d["beef"] + d["dog"])*0.01; 62 } 63 cout << d["apple"] << "\n"; 64 cout << d["beef"] << "\n"; 65 cout << d["orange"] << "\n"; 66 cout << d["egg"] << "\n"; 67 cout << d["mikan"] << "\n"; 68 return 0; 69}

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

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

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

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

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

guest

回答1

0

ベストアンサー

C++

1#include <iostream> 2#include <string> 3 4 5class Dict{ 6 double x[4]; 7public: 8 9 double& operator[](const std::string& t){ 10 if ( t == "apple" ) return x[0]; 11 else if ( t == "orange") return x[1]; 12 else if ( t == "beef" ) return x[2]; 13 else return x[3]; 14 } 15 16 double const& operator[](const std::string& t) const{ 17 if ( t == "apple" ) return x[0]; 18 else if ( t == "orange") return x[1]; 19 else if ( t == "beef" ) return x[2]; 20 else return x[3]; 21 } 22}; 23 24// 以下が正しい出力である. 25 26// 4 27// 4 28// 4 29// 4 30// 4 31 32int main(){ 33using namespace std; 34 Dict d; 35 36 d["apple"] = 1; 37 d["orange"] = 2; 38 d["beef"] = 3; 39 d["human"] = 4; 40 for(int i=0;i<10000;++i){ 41 // 拡散方程式.画像をぼかす処理などに使われる.全ての変数の値が適用するたびに徐々に均一になっていく. 42 d["apple"] = d["apple"] + (d["dog"] - 2*d["apple"] + d["orange"])*0.01; 43 d["orange"] = d["orange"] + (d["apple"] - 2*d["orange"] + d["beef"])*0.01; 44 d["beef"] = d["beef"] + (d["orange"] - 2*d["beef"] + d["dog"])*0.01; 45 } 46 cout << d["apple"] << "\n"; 47 cout << d["beef"] << "\n"; 48 cout << d["orange"] << "\n"; 49 cout << d["egg"] << "\n"; 50 cout << d["mikan"] << "\n"; 51 return 0; 52}

投稿2020/08/09 08:03

episteme

総合スコア16614

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

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

_._._ami

2020/08/09 08:08

本当にありがとうございます....!!!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.46%

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

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

質問する

関連した質問