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

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

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

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

Q&A

解決済

1回答

7543閲覧

C++:メンバ関数から、その関数を呼んだインスタンス名を取得したい

plcherrim

総合スコア17

C++

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

0グッド

0クリップ

投稿2017/02/01 16:36

以下のように、float型の変数3つを持つクラスがあります。(コンストラクタ略)
その内容を出力するメンバ関数viewpoint()で、以下の出力を行いたいです
例:
①defpointでhoge(3.0,4.0,5.0とでもしておきます)が定義されているとき、
②hoge.viewpoint()を実行すると、
③"View:hoge < 3.0 4.0 5.0 >"と表示される

つまり、そのメンバ関数を呼び出したオブジェクトの名前をメンバ関数から出力したいのです。
方法はあるでしょうか?

cpp

1class defpoint{ 2protected: 3 float x,y,z; 4public: 5 void viewpoint(){ 6 printf("View:%s < %.1f %.1f %.1f >\n","ここにオブジェクト名を指す何かが入ればうれしいです",x,y,z); 7 }

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

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

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

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

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

guest

回答1

0

ベストアンサー

こんにちは。

オブジェクトとその名前の結びつきって意外に緩いのですよ。

C++

1defpoint hoge(); 2defpoint& fuga=hoge; 3fuga.viewpoint();

の時、正しいオブジェクト名は何でしょうか?

マクロを使って無理っとやることはできますが、なかなか格好悪いです。
下記のようなイメージです。

C++

1class defpoint{ 2protected: 3 float x,y,z; 4public: 5 void viewpoint(char const* iObjectName){ 6 printf("View:%s < %.1f %.1f %.1f >\n",iObjectName,x,y,z); 7 } 8 : 9 10#define VIEWPOINT(dObject) dObject.viewpoint(#dObject) 11 : 12 13defpoint hoge(); 14defpoint& fuga=hoge; 15VIEWPOINT(hoge); // View:hoge ... 16VIEWPOINT(fuga); // View:fuga ...

投稿2017/02/01 17:01

Chironian

総合スコア23272

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

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

plcherrim

2017/02/01 17:13

なるほど、理解出来ました。分かりやすくコード例をいただき、ありがとうございます。 しかし、確かにかっこよくはないですね……。結びつきが緩いということはよく理解できたので、大人しく諦めるか引数を増やそうと思います。もともとデバッグ用に確認したかっただけなので。 そうそうカッコイイやり方はないですね。ありがとうございます!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問