質問

こうした 求めていのデザインインタフェース.当期純.

今んとの違いる構造体やクラスC++.について教えてください技術の違いなどを選んだ理由は、そのOO。

私が始まり明らかな違い:

  • 指定しなければ public: または private:, 会員は、構造体は公共のデフォルト会員のクラスは、民間によるデフォルトです。

思い違いを示のコーナーのC++仕様となります。

役に立ちましたか?

解決

されています難2差の授業が構造体.

Quothの基準§11.2.2C++98をC++の11):

にな アクセス指定子 のための基底クラス公開を想定して の派生クラスで宣言され struct 民間があった場合に想定されるクラスの宣言され クラス.

終わってしまうため完成度"日本酒、より広く知られてい差のクラス構造体定義(11.2):

会員のクラスで定義されて キーワード クラス民間 による デフォルトです。会員クラスの定義 のキーワード struct または 組合公開 デフォルトです。

追加の違い:キーワード class きを宣言するのに使用されるテンプレートパラメータの struct キーワードできませんので使用します。

他のヒント

引用 C++FAQ,

[7.8]の違いについて教えてください キーワードに構造体やクラス?

ナンバーをベース授業 構造体は公共のデフォルトでは、中 クラスは、デフォルトです。注意:することができるようになり拠点を授業 明示的に公共、民間、 保護な デフォルトする

構造体やクラスその他 機能的に等価です。

OK、あるミクリーン テクノにしてくれます。精神的にも 開発者に大きく関わって区別 間のクラスは、struct.A 構造体で感じオープンパイル のビットが少ないの 封止は可能です。A クラス感の生活 社会人と 知的サービスの強 封入障壁が見つからないか 定義のインタフェース。ですから、 ろう、悪かろう"というイメージほとんどの人ものは揃っているので、 きょうの利用構造体 キーワードとした場合を持つクラス 非常に少数の方法は公開データ (どうしようもない存在するもの システム!), なおきたい そのクラスのキーワードとなります。

で起C++'sの起源との互換性,C.

C構造体でいう概念は封止である。

公益のデフォルトでは、一般にはもっていったということとする際のオブジェクト指向アプローチで作りのできるネイティブが働OOPにおOO C思うが助けてくれたのC++でも、"Cクラスすることができなくなったという、民間がデフォルトです。

一方、合Stroustrup変わっていたの意味の struct そのた民間のデフォルトでは、こうして互換性が無くなってしばしばtrueとしての基準で分岐し、有効なすべてのCプログラムも有効なC++のプログラムは、大きな効果をC++の足がかり).

なので新しいキーワード class たちょうどそのような構造体が、民間によるデフォルトです。

場合はC++で来たからには、歴史を行い、その後も世界的にもほとんど例のなキーワードとなります。でも違うと思うんの影響です。

一般の人が利用構造体がこのような方法が構造体の使用C;公会員は、いかなコンストラクタとなユす ができ てのコンストラクタで構造体のように、授業がないという傾向がある)は、仮想方法等以来、言語として多くの人とコミュニケーションの読み込みコードとして指導する機器又は他のい棒組立、原VM opcodesることが可能になります良いアイデアにこだわる。

クラス'員は、民間のデフォルトです。Structのメンバが公開するデフォルトです。その他には他にはありません。も この質問.

にStroustrupの C++プログラミング言語:

るスタイルのご利用により状況の美味しさです。いりませんので、予めご struct のためのクラスのすべてのデータを公開します。私の授業として"なかなか適切な種類、データ構造です。"

機能もありません以外の公開

STRUCTタイプの抽象データタイプに分け設定のチャンクメモリによる構造仕様となります。構造体には、対応するファイルを直列化/直列化復元の構造でァイルに書き込まれるバーベイタム.(取得ポイントは、structのサイズのマクロを計算するためのバイト数をコピー、移動のデータは、struct.)

クラスは、異なるタイプの抽象データ型をしようという情報を確実にするために隠されているのです。内部的には、ができる様々なmachinations、方法、温度変数、状態変数です。など。るすべて表示するのに使用する一貫したAPIによる任意コードの利用を希望するクラスです。

効果、構造体はデータの授業はつのコードです。

ただし、うまく管理できなければならないことを理解するこれらは単なる抽象化.今でも十分高く、これを可能に構造体がどのような授業や授業がどのような構造体.実際、最初のC++コンパイラにおける前のコンパイラでコンパイルに変換するC++のコードC.このようにこれらの抽象化れを論理的に考える必要はない資産コンピュータそのものです。

を超えてのことでありそれぞれ異なるタイプの抽象クラスするソリューションを提供し、Cコードのネーミング!にすることができるのではな複数の機能被曝に同名の開発者を用いパターンの_().例えばmathlibextreme_max().グルーピングApiへの授業と同様の機能(ここでいう"手法"でグループとしてまとめて保護されてからネーミングの方法その他のこのプログラマを自のコードにより、増加のコード再利用しています。理論的には、少なくとも

1)会員は、会員のクラスは、民間によるデフォルトの構造体は公共のものがデフォルトです。

例えば、プログラム1に失敗したコンパイルおよびプログラム2作品。

// Program 1
#include <stdio.h>

class Test {
    int x; // x is private
};
int main()
{
  Test t;
  t.x = 20; // compiler error because x is private
  getchar();
  return 0;
}
Run on IDE
// Program 2
#include <stdio.h>

struct Test {
    int x; // x is public
};
int main()
{
  Test t;
  t.x = 20; // works fine because x is public
  getchar();
  return 0;
}

2)導構造体からaクラス/struct、デフォルトのアクセス指定子のための基底クラス/structである。が導出クラスは、デフォルトのアクセス指定子が非公開になります。

例えば、プログラム3に失敗したコンパイルおよびプログラム4作品。

// Program 3
#include <stdio.h>

class Base {
public:
    int x;
};

class Derived : Base { }; // is equilalent to class Derived : private Base {}

int main()
{
  Derived d;
  d.x = 20; // compiler error becuase inheritance is private
  getchar();
  return 0;
}
Run on IDE
// Program 4
#include <stdio.h>

class Base {
public:
    int x;
};

struct Derived : Base { }; // is equilalent to struct Derived : public Base {}

int main()
{
  Derived d;
  d.x = 20; // works fine becuase inheritance is public
  getchar();
  return 0;
}

他の唯一の違いは、デフォルトを継承するクラスや構造体、その個人及び公的ます。

ない仕様。主な違いはプログラマーの期待ときを読むコードを2年とする。構造体が選定のポッド.構造体でも使われているテンプレートmetaprogrammingだが定義されるタイプ以外の目的で定義オブジェクト。

ひとつ注意すれば、更新、レガシーアプリとした構造体を利用すが以下の問題:

古いコードの構造体コード掃除をし、これらを変更します。仮想機能はその新しい更新されます。

が仮想機能を操作しているときは、授業後に社内のコンパイラに追加のポインタのクラスのデータポイントの機能を確定します。

このク上で稼働している古いレガシーコードの場合、古いコードのどこかのstructをクリアすることができましたmemfillを明らかにすべてゼロ、ストンプのポインタをデータです。

  1. の構造は公共のデフォルトでは、会員のクラスは、民間によるデフォルトです。
  2. デフォルトの継承のための構造から他の構造やクラスです。デフォルトの継承のためのクラスから他の構造やクラスです。
class A{    
public:    
    int i;      
};

class A2:A{    
};

struct A3:A{    
};


struct abc{    
    int i;
};

struct abc2:abc{    
};

class abc3:abc{
};


int _tmain(int argc, _TCHAR* argv[])
{    
    abc2 objabc;
    objabc.i = 10;

    A3 ob;
    ob.i = 10;

    //A2 obja; //privately inherited
    //obja.i = 10;

    //abc3 obss;
    //obss.i = 10;
}

でも確認することができVS2005.

その他の主な差ではテンプレート。ってくださいをご利用いただくことがでクラスを定義する場合テンプレートがstruct.

template<class T> // OK
template<struct T> // ERROR, struct not allowed here
  1. 会員のクラス定義のキーワード classprivate デフォルトです。会員のクラス定義のキーワード structunionpublic デフォルトです。

  2. になアクセス指定子のための基底クラス public があった場合に想定されるの 由来のもの クラスで宣言され structprivate があった場合に想定されるクラスの宣言され class.

  3. きを宣言し enum class がない enum struct.

  4. 利用できる template<class T> がない template<struct T>.

このC++の標準で進を宣言する型として struct, その利用 class 宣言する場合のその逆も成り立ちます。また、 std::is_class<Y>::valuetrue for Yて structclass, ものではあ false のため enum class.

ここでは説明: http://carcino.gen.nz/tech/cpp/struct_vs_class.php

では、ますます時間:C++では、構造体と同一のクラスの場合、会員のstructて公共の視認性のデフォルトでは、そのクラスは民間レベルでの可視性によりデフォルトです。

だから約に従います。構造体が作成でき催シンプルなデータが進化のほか、会員機能のコンストラクタ.他方でも珍しい公共:アクセスは、struct.

ISO IEC14882-2003

9授業

§3

構造であって定義されたクラス の クラスのキー struct;員 ベースクラス(第10条) 公共デフォルトの項11).

その他の回答は非公開/公開デフォルトが注がstructであるクラスは、struct;なの異なる二つの項目だけでは二つの方法を定義する同一品目

ところが興味深い(特に以来、askerれを用いMSVC++かつ"ポリシー"C++)であることVisual C++による不特定の状況下での場合、クラスが宣言されて class その定義 struct (またはその疑いのある、それが逆になっているのでは標準のうっすらとは言っている言葉は完全に法律に基づいて行われる。

  • .授業のすべての会員によるデフォルトは民間が構造 会員に公開するデフォルトです。

    1. ありません期間のようにコンストラクタとデストラクタのための構造体が、クラスのコンパイラをデフォルトをご提供いただけない場合は.

    2. Sizeof空構造は0バイト比としてSizeof空のクラスは、1バイトは、structのデフォルトのアクセスタイプです。Structべき 一般的に使用するグループ化データです。

    クラスのデフォルトのアクセスタイプでプライベートに、デフォルトモード 相続が非公開になります。Aクラスを使用する分類データ 方法で動作すること。

    つまり、コンベンションは利用構造体が目的であ グループのデータを利用できるよう、必要なデータを抽象化し、 恐らく継承関係を示します。

    C++構造とクラス抜いてしまうことが確認された値がない限り、明示的に ドされます。その他の言語の授業や構造が 個別の意味論-ie.オブジェクト(インスタンスのクラス)が渡されます。 参照および構造物等の機能に渡される値です。注意:があり コメントに関する質問です。の議論のページへ に追加します。

を示唆するその他の回答なのかを明確に記載しその構造体はCの対応、使用量によって異なります;授業はいません。

ことばを書くヘッダがしたいCに対応していないオプション以外の構造体(Cの世界を持つことができない機能ができる機能のポインタ).

の違い classstruct 差をキーワードではなくデータの種類です。この二つの

struct foo : foo_base { int x;};
class bar : bar_base { int x; };

両方のクラスを定義するタイプです。の違いをキーワードコンテキストのデフォルトのアクセス:

  • foo::x が公開 foo_base 継承され公開
  • bar::x は、個人や bar_base 継承され個人

クラスは有意義なこのソフトウェア工学です。このデータ構造とアルゴリズムのクラス構造体はないが異なります。あずルールを制限するクラスの会員になされます。

開発時の大型プロジェクトに利用できない人々のクラスの、最後に取得し複雑な結合コードでのみ使う機能やデータにあると言わざるを得ない。クラスは許可制とinherentsめにデカップリングおよび再利用コードです。

読まれたのであれば、一部のソフトウェア工学の原則にとって最も基準で実施されるのは容易なクラスです。例えば:http://en.wikipedia.org/wiki/SOLID_%28object-oriented_design%29

ちなみに、structを割り当てて、収縮のメモリを含む複数の変数値型の変数を値embbededがstructで割り当てられます。一方、参照の型変数の値を外部よび基準によりポインタも組み込みがstructで割り当てられます。

あると考えこのためのガイドラインにはズームインしてください。ための構造体やクラス https://msdn.microsoft.com/en-us/library/ms229017%28v=vs.110%29.aspx .

√検討を定義する構造体の代わりにクラスのインスタンス タイプが小さく、一般的に短寿命は一般的に埋め込 その他のオブジェクト。

Xを避けを定義する構造体でない限りタイプは全 その特徴は次の通りです。

で論理的には単一の値 似たプリミティブ型(int,doubleます。

このインスタンス サイズ下の16バイトまでとなります。

では変更できません。

まである必要はありません弁当 ます。

の違い structクラス キーワードをC++であることがある場合、特に指定子、ある特定の"複合データタイプによるデフォルト struct または 組合 は、公開キーワードを単なると考えてデータ隠蔽がクラスは、民間のキーワードを考慮した隠れているプログラムコードまたはデータです。常にプログラムを使用 struct のためのデータ クラス コードのお酒を造りました。詳細な情報についてはできるのです。

のすべてのこれらの要因きであると結論づけることができ概念クラスの高い現実世界のオブジェクトではなく"構造".主なOOPの概念を利用性の高い実践的を説明する実世界シナリオと統合して実現しました。たとえば、デフォルトの相続は、公共のための構造体、その適用この規則のための実世界では、パ.がクラスのデフォルトの継承は、私がよりリアルに再現。●

思う必要性を正当化するクラスは、もっと広い実世界対象の概念は構造がプリミティブの概念の悪い内部組織(Eventhough構造体おりOOP概念についての意味)

の構造やクラスのキーワードマットは、公共および個人会員の宣言に存在します。のデータを会員と会員機能を定義することができま公共、民間などを保護します。

また、その他。ない場合はコンストラクタを定義するクラスのコンパイラを定義します。がstructでない場合を定義するコンストラクタ、コンパイラな定義するコンストラクタです。であることを本当に必要としないコンストラクタでは、構造体はより良い選択性能端).とにしました。悪い。

授業の参照型および構造物の数値です。
"と言うとクラスの参照型
基本的にはそのアドレスのインスタンス変数です。

例えば:

Class MyClass
{
    Public Int DataMember;  //By default, accessibility of class data members 
                            //will be private. So I am making it as Public which 
                            //can be accessed outside of the class.
}

メインの方法
を作成しますこのクラスのインスタンスを新たなオペレーターの割り当てを行うメモリをこのクラス
-店舗のベースアドレスのMyClass型変数(_myClassObject2).

Static Public void Main (string[] arg)
{
    MyClass _myClassObject1 = new MyClass();
    _myClassObject1.DataMember = 10;

    MyClass _myClassObject2 = _myClassObject1;
    _myClassObject2.DataMember=20;
}

上記のプログラム MyClass_myClassObject2=_myClassObject1;指導を示し、両変数の型MyClass

  1. myClassObject1
  2. myClassObject2

とをポイントは同じメモリの場所です。
基本的に付けを同一のメモリ場所を他の変数と同じタイプです。

なので変更されることにより、任意の一つのオブジェクトタイプMyClassへの効果別
であることを指摘し、同一のメモリ場所です。

"_myClassObject1.DataMember=10;"で、このオブジェクトのデータメンバーが含まれまでの価値は10です。
"_myClassObject2.DataMember=20;"で、このオブジェクトのデータを会員の価値は20です。
最終的には、 またアクセスdatamembersのオブジェクトを通じてポインタ.

とは異なり、授業構造の値です。例えば:

Structure MyStructure
{
    Public Int DataMember;  //By default, accessibility of Structure data 
                            //members will be private. So I am making it as 
                            //Public which can be accessed out side of the structure.
}

Static Public void Main (string[] arg)
{
    MyStructure _myStructObject1 = new MyStructure();
    _myStructObject1.DataMember = 10;

    MyStructure _myStructObject2 = _myStructObject1;
    _myStructObject2.DataMember = 20;
}

上記のプログラム
スをインスタンス化オブジェクトのMyStructureタイプを新しいオペレーターと
格納アドレスの_myStructObject変数の型MyStructureと
格値10データの構造"_myStructObject1.DataMember=10"から。

次回線
私は別の変数を宣言する_myStructObject2のタイプMyStructure割_myStructObject1!
こちらです。純C#コンパイラを作成し他のコピー_myStructureObject1オブジェクト
付けるメモリ位置MyStructure変_myStructObject2.

うに変更してく_myStructObject1い効果を他の変数_myStructObject2のタイプMyStructrue.
その声の構造値です。

その基底クラスのクラスはオブジェクトは、即時の基底クラスの構造ValueTypeを受け継ぎからオブジェクトです。
授業支援の継承は構造物はしない

どのような方法で行った。
何の理由は?
その答えはます。

できる旨の上厳封した、静的部分、できない個人、保護や保護内.

の構造体やクラスではこの構造体だけを宣言するデータ変数の異なるデータ型をスを宣言するデータの変数、関数、このように操作できデータの変数によります。

->他の手軽なものが見クラスvs structであることながら実行ファイルのプログラムにしたい場合は、一部事業の構造体も全ての業務に必要なものは、別途機能に渡す必要がありまオブジェクトの構造体を読んでファイルからでも操作します。がクラスにする場合、その機能は一部の運営に必要なデータの詳細..いやすいるためには、ただひたすら読みオブジェクトからファイルを呼び出..

そのdepenndsのプログラマをそれに適した...によっていましたが、私好みのクラスの顔で対応しぁ、私がそれを達成するため、より実施するほぼすべての言語とその素晴らしい特徴の全てのプログラミング-)

青のunforgotten違いされてしまったのでしょはこのクラスの支援データ隠蔽にも対応業務を行って建データタイプが構造体の作!

**更新:**は無視してくださいこの応答が返されます。なかった可能性を検討して、struct、また大通りに面していて立地も初期化されていないものだっ0になります。あな初期設定の違い構造体やクラスです。


私を見ても異なる構造体および授業はどうしていくべきなのかについてデフォルトの初期化.

struct Foo {
    int a;
};

class Bar {
    int a;
};

class Tester {
    Foo m_Foo = Foo();
    Bar m_Bar = Bar();

public:
    Tester() {}
};

int main() {
    auto myTester = Tester();
}

施設まで格安料金プランをコードをmyTester.いただけるm_Foo、struct、m_Foo.aが0に初期化され、m_Barのクラスは、m_Bar.は初期化されていない.いずれの違いうデフォルトのコンストラクタはstruct前クラスです。私は見たことのないようにした。

が3つの基本的な差の構造とクラス

1-メモリされている必要があり構造をスタックメモリに近いプログラミング言語か否かのためのクラスのスタックメモリされている必要がありみreffrence、実際のメモリは、一切のヒープメモリ。

2デフォルト構造として扱う公るかどうかクラスの治療としてます。

第3に合わせて再利用コードの構成がクラスまでの再利用と同じコードで多くの時間というinhertence

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top