web-dev-qa-db-ja.com

C ++での構造の継承

structをC++で継承できますか?

153
abbas

はい、structclassとほぼ同じです。ただし、デフォルトのアクセシビリティはpublicの場合はstructです(ただし、privateの場合はclassです)。

272
Alex Martelli

はい。継承はデフォルトでパブリックです。

構文(例):

struct A { };
struct B : A { };
struct C : B { };
112
Suvesh Pratapa

アレックスとエヴァンがすでに述べたこと以外に、C++構造体はC構造体とは異なることを付け加えます。

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

43
Chad Gorshing

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

23
Evan Teran

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

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

たとえば、プログラム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;
}
18
Neha Agrawal