C ++での構造継承


回答:


290

はい、structまったく同じであるclassデフォルトのアクセスがある以外publicのためにstruct(それはだながらprivateのためclass)。



46

AlexとEvanがすでに述べたこと以外に、C ++構造体はC構造体とは異なることを付け加えておきます。

C ++では、構造体はC ++クラスと同じようにメソッドや継承などを持つことができます。


4
C ++構造体はC構造体のようにすることができます。ある場合、それはPOD-Plain Old Datatypeと呼ばれます。たとえば、POD構造体のみがユニオンの一部になることができるため、これは重要な区別です。
camh 2009年

9
しかし、PODはメソッドを持つことができるため、cgorshingが話している意味でのC構造体とは「似て」いない。
スティーブジェソップ

PODの場合、メソッドはありません。それ以外の場合、名前は無意味です。
RL-S

24

もちろん。C ++では、構造体とクラスはほぼ同じです(プライベートではなくパブリックにデフォルト設定するなどの小さな違いがあります)。


23

C ++では、構造体の継承はクラスと同じですが、次の違いがあります。

クラス/構造体から構造体を派生する場合、基本クラス/構造体のデフォルトのアクセス指定子はパブリックです。また、クラスを派生する場合、デフォルトのアクセス指定子はプライベートです。

たとえば、プログラム1はコンパイルエラーで失敗し、プログラム2は正常に動作します。

// Program 1
#include <stdio.h>

class Base {
    public:
        int x;
};

class Derived : Base { }; // Is equivalent to class Derived : private Base {}

int main()
{
    Derived d;
    d.x = 20; // Compiler error because inheritance is private
    getchar();
    return 0;
}

// Program 2
#include <stdio.h>

struct Base {
    public:
        int x;
};

struct Derived : Base { }; // Is equivalent to struct Derived : public Base {}

int main()
{
    Derived d;
    d.x = 20; // Works fine because inheritance is public
    getchar();
    return 0;
}
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.