- 締切済み
現在、プログラムが解けずに悩んでいます。どうかお力を御貸しください。
int main() { Power p1, p2(2), p3(3); //初期値の設定 p1.print("p1=");p2.print("p2=");p3.print("p3="); //メンバ関数printで表示 (++p2).print("++p2="); //++p2は,p2のメンバ値の2乗(前置演算) p2.print("p2="); (p3++).print("p3++="); //p3++は,p3のメンバ値の2乗(後置演算) p3.print("p3="); return 0; } ※クラスPowerには、int型のメンバ値を1つだけ持ち、メンバ関数として、operator++とprint()を持つ。 operator++には前置演算用と後置演算用の2種類がある。 解ける人がいましたら、教えてください。 お願いします。
- yuoiejkal
- お礼率0% (0/8)
- C・C++・C#
- 回答数3
- ありがとう数1
- みんなの回答 (3)
- 専門家の回答
みんなの回答
- Tacosan
- ベストアンサー率23% (3656/15482)
その前に, 問題を教えてください.
- mikaemi
- ベストアンサー率50% (33/65)
たとえば、こんなの? ==== 適当すぎる?(笑) #include <iostream> #include <string> class Power { int v; public: Power(int v_ = 0) : v(v_) {} Power &operator++() { v *= v; return *this; } Power operator++(int) { int rv = v; v *= v; return rv; } void print(const std::string &s) const { std::cout << s << v << '\n'; } };
- koko_u_
- ベストアンサー率18% (459/2509)
インクリメント演算子を「2乗」を計算するように Power クラスに実装しろということですか? 回答:断固拒否
関連するQ&A
- オーバーロードされたメンバ関数のポインタをとる
オーバーロードされたメンバ関数のポインタをとるにはどうしたらよいでしょうか? 具体的には前置インクリメント演算子 ++()と、後置インクリメント演算子 ++(int)の両方のをオーバーロードしたときに両方のメンバ関数ポインタがとりたいです。 環境はVC7.1です。 よろしくお願いします。
- ベストアンサー
- C・C++・C#
- 演算子のオーバーロードについて
[]演算子のオーバーロードでつまづきました。 代入文で左辺、右辺、両方ともに[]演算子を使う場合 int &operator[](int i) { return a[i]; } int &operator[]のようにして、戻り値を参照型にしています。 このとき、main関数内で、 ob1[2]=ob2[2];(ob1,ob2はoperator[]関数が関連付けられているクラスのオブジェクト) のようにすると、左辺(ob1)にちゃんと代入されています。 つまりこの場合、main()関数内で、 (int &)型の(this->a[i])(元のオブジェクトは、ob1) に (int &)型の(this->a[i])(元のオブジェクトは、ob2)を代入しているのでしょうか?
- ベストアンサー
- C・C++・C#
- プログラム
C言語を現在習いたての者ですが #include "stdafx.h" int main() { int i; for(i=0;i<10;++i) printf("%d %d %d\n",i,power(2,i), power(-3,i)); } power(x, n) int x,n; { int i,p; p=1; for(i=1;i<=n; ++i) p=p*x; return(p); } と、xのn乗を求めるpower関数のプログラムのようですが 教科書に記載されていた通り打ち込んでもコンパイルが通りません・・ ちなみに出るのは 'power': 定義されていない識別子です 'main': 関数に戻り値の型が指定されていません。voidを戻り値とみなし 'x' :定義されていない識別子です 'n':定義されていない識別子です '<Unknown>':関数の定義が間違っています 予期せぬEOFが発見されました でエラー5で警告1になります。 どこがダメなのか教えてください。
- 締切済み
- C・C++・C#
- オペレータ定義について
すみません、オペレータ定義について教えてください。 ■以下のようなクラスに、[] が定義されていて、 class String { public: ・ ・ (メンバ関数がいくつかあり) ・ // num 番目の文字を返す char operator[](int num) const; char& operator[](int num); private: char* string; }; ■関数はこのように書かれていて、 char String::operator[](int num) const { // 文字列の num 番目の文字を返す 1 return string[num]; } char& String::operator[](int num) { // 文字列の num 番目の文字を返す 2 return string[num]; } ■これを →[] main() から使うにはどのようにしたらいいのでしょうか?
- ベストアンサー
- C・C++・C#
- C++言語 メンバ関数
何気なく使用しているクラスのメンバ関数、これの中身が実際どうなってるか知りたいです。大別して2種類に分かれますので以下の2つを 教えて下さい。また詳しく載っているサイトなどあれば教えて下さい。 1,stringクラスMid(int start,int length関数と operator関数+について class String{ char *p; char *q; public: //各定義 }; String String::Mid(int start,int length) const { // } String String::operator+(const String&s)const{ return String(p+s.q+s.p); } 最初の方はイメージもつかず、2つめのほうはポインタに ポインタを加えようとしましたとでます。 教えて下さい。
- ベストアンサー
- C・C++・C#
- 質問が多いです・・・・
C++のconst+その他について疑問が出てきてしまったため質問しようと思います。 現在下記のURLで示したサイトで勉強中です。http://www5c.biglobe.ne.jp/~ecb/cpp/04_19_02.html :::質問1::: 上記のサイトで提示してあるプログラムについて質問をしていきますが、上のプログラムを全て理解しなくても大丈夫だと思います。質問内容は表記についてです。 プログラムではたくさんの代入演算子、比較演算子を自分で定義していますが、比較演算子についてクラス内部で定義してあるものと、外部関数をfriend登録してある関数とに分かれています。この差というのは起動オブジェクトがそれ自身のクラスから生成された場合はメンバ関数として定義し、起動オブジェクトが単なる変数などの場合外部関数として定義するという区別でいいのでしょうか? :::質問2::: 質問1で紹介したたくさんの比較演算子を自分で定義してある部分についてですが例えば次のような場合です。 bool String::operator< (const char* p)const{ return strcmp( pStr, p ) < 0; } この場合のconstについて質問したいところがあります。boolの行の一番最後のconst・・・・ この意味はoperatorの前に書いてあるクラスのメンバ変数をこの関数の処理で変更しないという解釈でよいのでしょうか? そしてreturn文についてです。 この関数がboolと定義されているところから想像はつきますが、 strcmp( pStr, p ) < 0 この結果が返されるということでいいんですよね?このような記述の仕方は初めてみましたが、例えば if( strcmp( pStr, p ) < 0 ) return TRUE; else return FALSE; と記述しても同じですよね? :::質問3::: キャスト演算子の部分で次のように記述してあります。 String::operator const char*()const{ return pStr; } 恥ずかしながら、どのような処理になっているかさっぱりです。もし分かる方がいたら解説をお願いしたいです。 長く質問してしまって申し訳ないです。 全てといわずこのどれか1つでもいいので、答えることができる方はよろしくお願いします。
- ベストアンサー
- C・C++・C#
- C#における++演算子のオーバーロードについて
はじめまして。 いろいろ調べてみたのですが、わからなかったので、質問させてください。 C#における++演算子のオーバーロードについてなのですが、 まずは、以下のコードをご覧ください。 ================================================================ using System; class Test { private int Num; public Test(int x) { this.Num = x; } public static Test operator ++(Test t) { Test result = new Test(t.Num + 1); return result; } public override string ToString() { return this.Num.ToString(); } } class TestDemo { public static void Main() { Test t = new Test(0); Console.Write(t++ + "\n"); Console.Write(t + "\n"); Console.Write(++t + "\n"); Console.Write(t + "\n"); } } ================================================================ 実行結果 0 1 2 2 ================================================================ ++演算子のオーバーロード関数の実装が一つなのに 前置インクリメントと後置インクリメントが適切に行われています。 二つのインクリメントが行われるときに同じメソッドが 呼び出されていると思うのですが、同一の実装で、振る舞いが 異なるのは、なぜなのでしょうか?どのようなカラクリで 実行されているのでしょうか?全くわかりません。どなたか 教えてください。よろしくお願いします。
- ベストアンサー
- C・C++・C#
- プログラムについて
2進数を文字としてgets()関数を使って入力し,入力された値と宣言している変数(初期値は0)とのビット演算和を取り,2進数に変換し直すという3つの動作を繰り返すプログラムを作成しようとしています。 現在は,現在は最後の出力の部分が前回演算和した値が反映されずに出力してしまうのでこまっています。現在作成しているプログラムを添付します。ここを直したほうがよい,または,このプログラムの方がよいのではと思う方は返信願います。 int main(void) { char a[100],e[100]; int len,k,p,g; int c=0,d; int nisin[16]; int i; printf("2進数を入力:"); gets(a); while(a[1]!=0){ len=strlen(a); for(k=0;k<=len-1;k++){ e[k]=(a[k]-'0')<<(len-(k+1)); } g=0; for(p=0;p<=len-1;p++){ g+=e[p]; } printf("10進数は:%d\n",g); c|=g;/**/ printf("演算和:"); /*変換*/ for(i=0; i<16; i++){ nisin[i] = c % 2; c = c / 2; } /*出力*/ for(i=16-1; i>=0; i--){ printf("%d",nisin[i]); } printf("\n"); printf("2進数を入力:"); gets(a); } return 0; }
- 締切済み
- C・C++・C#
- C言語のプログラムで...
下のプログラムは参考書にあったサンプルプログラムなのですが /* 関数の宣言 */ int print_struct(struct person dat); のところはなぜint型なのですか? #include <stdio.h> #include <string.h> /* 構造体の定義 */ struct person { char name[20]; /* 名前 */ double height; /* 身長 */ double weight; /* 体重 */ int bpl; /* 最低血圧 */ int bph; /* 最高血圧 */ }; /* 関数の宣言 */ int print_struct(struct person dat); /* main関数 */ int main(void) { /* 変数の宣言 */ struct person dat; /* 構造体のメンバーに値を代入 */ strcpy(dat.name,"山田太郎"); dat.height = 173.5; dat.weight = 63.0; dat.bpl = 98; dat.bph = 113; /* struct person関数を実行 */ print_struct(dat); return 0; } /* print_struct関数 */ int print_struct(struct person dat) { /* 画面に出力 */ printf("%s\n",dat.name); printf("%f\n",dat.height); printf("%f\n",dat.weight); printf("%d\n",dat.bpl); printf("%d\n",dat.bph); return 0; }
- ベストアンサー
- C・C++・C#