メンバ関数の呼び出し方法はどちらがよい? – プログラミング – Home

メンバ関数の呼び出し方法はどちらがよい...
 
通知
すべてクリア

メンバ関数の呼び出し方法はどちらがよい?


独しん
 独しん
(@独しん)
ゲスト
結合: 19年前
投稿: 2
Topic starter  

はじめまして、C++を始めて間もない初心者です。

Windows2000、VisualC++6.0でコンソールアプリを作りながら学んでおります。

関数になるべく必要のないアクセス権は持たせないほうが良いと
いろいろ書いてあるのですが、他のクラスのメンバ関数を呼び出すとき
呼び出し方に良い悪いあるのですか。

一つ目
class ratus
{public:void close(void);
};

class mice
{public:void open(void);
ratus z;
};

void mice::open(void)
{z.close();}

void ratus::close(void)
{std::cout<<開通;}

void main()
{mice sin;
sin.open();}


引用解決済
トピックタグ
独しん
 独しん
(@独しん)
ゲスト
結合: 19年前
投稿: 2
Topic starter  

すいません。送信押してしまいました。

二つ目は
class ratus
{public:void close(void);
} z;

class mice
{public:void open(void);
};

void mice::open(void)
{
z.close();}

void ratus::close(void)
{std::cout<<開通;}

void main()
{mice sin;
sin.open();}
です。


返信引用
aetos
(@aetos)
Noble Member
結合: 5年前
投稿: 1480
 

違うのは z の宣言位置だけのようですが…

まず、前提として、コードは確かにこのように書かれていますか?
Java や C# ライクに、メンバの宣言と定義を同時に行うのは、C++ では一般的なスタイ
ルではありません。C++ では、(テンプレートを使わない限り)宣言をヘッダに書き、
定義を cpp ファイルに書くのが一般的です。
もちろん、そうでない方法でも通用します。今回のように宣言と定義を同時に行っても
間違いではありません。
で、今回はこのように、かつ、これは cpp ファイルに書かれているということでよろし
いですか?

さて、どちらがいいかということですが…コードの意味が等価でないため、単純に比較
できません。
第一案では、mice のメンバ変数として ratus を持っていますから、main の中で mice
のインスタンスが生成された時に z が生成されます。
第二案では、z はグローバル変数なので、1つしか存在しません。mice のインスタンス
をいくつ作っても、すべての mice は同じ z を共有します。
この2つの案はそもそも仕様が違うため、まずは仕様を明確にしないと、どちらが望ま
しいのか決めることはできません。

ただし、どちらの仕様だとしても、個人的にはどちらの案も望ましいとは言えないと思
います。


返信引用
PATIO
(@patio)
Famed Member
結合: 3年前
投稿: 2660
 

例としてあげるにしてももうちょっと意義がわかるような例にした方が
伝わりやすいと思いますよ。

元々やりたい事がきちんと提示されていない(シャノンさんが言われている仕様の事です)
ので何をやりたくて例を提示しているのかがさっぱりわかりません。
特に今回みたいな抽象的な質問に関しては例の挙げ方がうまくないと内容が伝わりません。
具体的にどういうことがやりたいのかきちんと解説した方が良いと思いますよ。


返信引用

返信する

投稿者名

投稿者メールアドレス

タイトル *

プレビュー 0リビジョン 保存しました
共有:
タイトルとURLをコピーしました