• 締切済み

用語の正式名称は?(C++)

C++のクラスや構造体で、 class TEST { private: int a; //A int func1(); //B protected: int b; //C int func2(); //D public: int c; //E int func3(); //F } struct XXX { int x; //G } というのがあったとします。 //A~//G の正式な読み方はなんでしょうか? たとえば//Bなら、「プライベートメソッド」「プライベートメンバ関数」ですか? ご存知なかた、ご教授おねがいします。 できればその定義が書かれていた出所(URL)もおしえてください。

みんなの回答

noname#20001
noname#20001
回答No.4

#3です >他の言語でも使うと思いますが少なくともCでは使いません C#という言語ではプロパティという概念が メンバ変数・メンバ関数とは別に存在するようです。 不用意なこと書きました。すみません 「C++では使いません」、に訂正します。

noname#20001
noname#20001
回答No.3

こんにちわ。 以下、”正式”でなく自分が使ってる言葉です。 A:プライベートメンバ変数 B:プライベートメンバ関数 C:プロクテッドメンバ変数 D:プロクテッドメンバ関数 E:パブリックメンバ変数 F:パブリックメンバ関数 G:メンバ ・・・と呼びます。 構造体には関数はないので「変数」「関数」とはつけなくてもいいかなっと(つけてもいいと思います)。 あと、「メソッド」「プロパティ」はVBの方で「メンバ関数」「メンバ変数」を表すときに使います。 (他の言語でも使うと思いますが少なくともCでは使いません) 以上、正式なものでなくて申し訳ないのですが、参考までに。

  • Tacosan
  • ベストアンサー率23% (3656/15482)
回答No.2

訂正もしくは補足: 手元の規格 (ISO/IEC-14882:1998, つまり C++ の国際規格そのもの... の英語バージョン) では, 英語における一般的な単語として member を使っているだけであり, そこに C++ としての特別な意味は持たせていないと思います. 「彼はあの野球チームのメンバだ」というときの「メンバ」と同じ意味でしょう. なので, 「このように呼ぶ」と「正式に定義された」表現はありません. ちなみにこの規格では method も「~の方法」という意味の普通の英単語としてしか使っていませんし, member variable (訳せばメンバ変数) という表現はざっと見た感じでは使っていないと思います.

  • Tacosan
  • ベストアンサー率23% (3656/15482)
回答No.1

「正式な」というのはどういう意味でしょうか? 規格では「メンバ」, 「メンバ関数」となっているので「プライベート (な) メンバ」とか「プロテクテッド (な) メンバ関数」と呼べば必ず通じるような気はしますけど, これも「『メンバ』と呼ぶ」と定義されているわけではない (いきなり「メンバ」, 「メンバ関数」と書かれている) ですし.

worldwalk
質問者

補足

「メンバ」でも「メンバ変数」でも通じます。なら、どちらの名称が規格(どんな名前の規格なのかはわかりませんが)で定義されているのか知りたかったのです。 ※でも、規格自体「メンバ」「メンバ変数」と書かれているのなら、呼び方自体きっちりと定義されていないのですか。。

関連するQ&A

  • C++/CLIでクラス内の要素を相互利用する方法

    C++/CLIでクラスの中に定義された構造体等を、複数のクラス間で相互利用したいのですが、そのようなことは可能なのでしょうか。 とりあえず以下のコードを見ていただきたいのですが、 ref class class1; ref class class2; ref class class1 { public:  enum struct enum1  {   aa,bb  };  void func1a(class1^ obj){} // 1. OK  void func2a(class2^ obj){} // 2. OK  void func1b(class1::enum1 e){} // 3. OK  void func2b(class2::enum2 e){} // 4. ERROR }; ref class class2 { public:  enum struct enum2  {   aa,bb  };  void func1a(class1^ obj){} // 5. OK  void func2a(class2^ obj){} // 6. OK  void func1b(class1::enum1 e){} // 7. OK  void func2b(class2::enum2 e){} // 8. OK }; これの4.がコンパイルエラーになります。 このような構造を定義することはできないのでしょうか。

  • C++ クラスをメンバにもつクラスについて

    お世話になります。C++初心者でうまくコードが書けません(><) クラス1と2があり、クラス1のメンバにはクラス2があります。 メインでクラス1をインスタンス化してクラス2のfunc2を呼び出します。 func2ではクラス1のインスタンスから呼び出された場合にクラス1の m_int1を取得します。 Class Class1{ public:  int m_int1;  Class2 m_Class2; }; Class Class2{ public: void func2(); }; void Class2::func2(){  /*ここの記述方法が分かりません*/  /*C1から呼び出されたらC1のm_int1に100を入れる*/  /*以下間違え*/  class1 C2_1;/*別のclass1のオブジェクトなのでこれに入れてもダメっぽい*/  C2_1.m_int1 = 100; } void main(){  class1 C1;  C1.m_int1 = 10;  C1.m_class2.func(); } C1.m_class2.func()の中から呼び出したC1にアクセスする方法が 分かりません(TT)。実体がまだあるのだからアクセスする方法は あると思うのですが・・・ どなたかよろしくお願いします。

  • C#で参照

    C#で参照 こんにちは。 例えば、C++で class A { int &x; public: A(int &_x):x(_x){} public: void disp() { std::cout<<x<<std::endl; } }; void func() { int x=100; A a(x); a.disp(); x=200; a.disp(); } とすると、a.xとxとを連動させることができますが、同様のことをC#で行うにはどうすればよいのでしょうか? int x=100; の定義を変えずに行うことは可能でしょうか? よろしくお願いします。

  • 【C++】関数ポインタの使い方

    関数ポインタの使い方で悩んでいます。 下記の (1)のようにグローバルメソッドとして定義したメソッドを関数ポインタに代入することは出来るのですが、 (2)のようにクラスのメンバメソッドとして定義したメソッドは関数ポインタに代入することは出来ませんでした。 Error:バインドされた関数へのポインターは関数の呼び出しにのみ使用できます。 というエラーが発生します。 関数ポインタに外部参照でメソッドを代入することは出来ないのでしょうか? -----(1)------------------------------------------------------------------ #include "stdafx.h" #include <iostream> using namespace std; int f(int a, int b){ return a * b; } int _tmain(int argc, _TCHAR* argv[]) { typedef int (* FUNC_POINTER)(int, int); FUNC_POINTER fp; fp = f; cout << fp(1,2) <<endl; getchar(); return 0; } ------------------------------------------------------------------------- -----(2)------------------------------------------------------------------ #include "stdafx.h" #include <iostream> using namespace std; class MPointerList{ public: int f(int a, int b){ return a * b; } }; int _tmain(int argc, _TCHAR* argv[]) { typedef int (* FUNC_POINTER)(int, int); FUNC_POINTER fp; //fp = f; MPointerList mP; fp = mP.f; cout << fp(1,2) <<endl; getchar(); return 0; } -------------------------------------------------------------------------

  • クラスの設計の問題

    今C++でクラスの設計をしています。 どう設計すれば、いいか分からないので、しっている方に教えていただきたいですが。 class A{ private: int id; public: int getId(); void setId(); }; class B{ private: int id; public: int getId(); void setId(); } class C{ private: int id; public: int getId(); void setId(); } この三つのクラスが、共通な機能があります。また、実装も同じで、 継承を利用して、どう設計すれば、いいですか? よろしくお願いします。

  • Visual Stdioで、C言語のプログラミングを勉強してるのですが

    Visual Stdioで、C言語のプログラミングを勉強してるのですが、 不明点があるため質問させて頂きます。 【前提条件】 ---------------------------------------------------- < TestHeader.h > typedef struct A { int (*a)(struct B* x, char* y, struct C** z); } A; ---------------------------------------------------- < TestSource.c > static int func(struct B* x, char* y, struct C** z) { return 0; } struct A D = { .a = func, }; ---------------------------------------------------- 上記の条件で、< main.c >を作成し、 main関数からfunc関数へ遷移するようにしたいです。 書籍などで調べたのですが、main関数の作成方法が分かりません。 ご教授のほど、よろしくお願いします。

  • 問題の解説お願いします。(オーバーロード&オーバーライド)

    class A{ protected int method1(int a , int b){ return 0; } } クラスAを継承したクラスで同時に定義できるメソッド が、 public int method1(int a,int b){return 0;} が良くて private int method1(int a,int b){return 0;} static protected int method1(int a,int b){return 0;} がだめな理由がいまいちわかりません。 法則みたいなものにこう書いてありました。 (オーバーロードについて) 同一クラス内に同一名称のメソッドを定義することができます。 ただし、それらは引数が異なるものでなければならず、 アクセス制御修飾子や戻り値の型だけが異なるメソッドは 定義することができません。 (オーバーライドについて) サブクラスでは、スーパークラスに存在するメソッドと同一引数・ 同一戻り値型を持つメソッドを定義することが許されています。 これら以外にも何か決まりがあるのでしょうか よろしくお願いします。

    • ベストアンサー
    • Java
  • C++の解放時の動作

    お世話になっております。 C++の解放時の動作について疑問があるため質問させていただきます。 class Super{ private: float x, y, z; public: ~Super(){} }; class Child : public Super{ private: int a, b, c; public: ~Child(){} }; int main( int argc, char **argv ){ A *a = new Child: delete a; return 0; } 簡略ですが、上記を走らせた場合、インスタンスは正しく解放されるのでしょうか? 一応デストラクタは動作しますが、実際のところ、子クラス分のデータが解放されない気がします。 ネット上のサンプルでこういった例を時々目にしますが、この方法は問題ないのでしょうか? よろしくお願いいたします。

  • C++ のクラスの定義

    C++の初心者です。 C++のことでお聞きしたいことがあります。 namespace test1{ class A { friend class B; protected: int a; }; } とtest1の下にAクラスを作り namespace test2{ class B { public: test1::A A1; }; } と別のnamespaceにBというクラスを作り、 A1というAのインスタンスを持ちたいのです。 しかし、Aというクラスを先に宣言しているので Bというクラスが解らないらしく friendがうまく働きません。 friend class test2::B としても test2がまだ宣言されていないので、 ????とコンパイルエラーが出ます。 先にtest2::B を宣言してしまうと、 今度はtest1::Aが解らずに エラーが出てしまいます。 こんな場合はどのように書けばよろしいのでしょうか? 環境はwindows2000でVC++ 6.0です。 どうか宜しくお願いいたします。

  • C++でfriendクラスにしているのにprivateメンバにアクセスできない

    C++でメンバ変数をprivateにして、特定のクラスにだけ公開するようにクラスをfriend指定したのですがprivateメンバにアクセスできませんとエラーが吐かれてしまいます。 先行宣言したりもしてみたのですがどうしても使用できません。 何か心当たりのあるかた教えてください。 class A { friend class B; private: int a; }; class B { public: void test( A *a ) { a->a = 0; } }; コードは違いますがこんな感じのことをしたいのです。 /* コンソールで小さなプログラムでテストしてみると動くのにいざ実際のソースに組み込むと動かないという奇妙な状態です。よろしくお願いします。 */

専門家に質問してみよう