C ++中的结构继承

时间:2009-06-11 03:42:15

标签: c++ inheritance struct

可以在C ++中继承struct吗?

6 个答案:

答案 0 :(得分:263)

是的,structclass完全相同,但public的默认辅助功能为struct(而privateclass)。

答案 1 :(得分:110)

是。默认情况下,继承是公共的。

语法(示例):

struct A { };
struct B : A { };
struct C : B { };

答案 2 :(得分:40)

除了Alex和Evan已经说过的内容之外,我想补充一点,C ++结构不像C结构。

在C ++中,结构可以像C ++类一样拥有方法,继承等。

答案 3 :(得分:22)

当然。在C ++中,结构和类几乎完全相同(默认为公共而非私有的东西是小的差异)。

答案 4 :(得分:14)

在C ++中,结构的继承与类相同,但以下区别除外:

从类/结构派生结构时,基类/结构的默认访问说明符是public。在派生类时,默认访问说明符是私有的。

例如,程序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;
}

答案 5 :(得分:2)

是的,c ++结构与c ++类非常相似,除了所有内容都是公共继承的(单/多级/分层继承,而不是混合继承和多继承) 这是演示代码

#include<bits/stdc++.h>
using namespace std;

struct parent
{
    int data;
    parent() : data(3){};           // default constructor
    parent(int x) : data(x){};      // parameterized constructor
};
struct child : parent
{
    int a , b;
    child(): a(1) , b(2){};             // default constructor
    child(int x, int y) : a(x) , b(y){};// parameterized constructor
    child(int x, int y,int z)           // parameterized constructor
    {
        a = x;
        b = y;
        data = z;
    }
    child(const child &C)               // copy constructor
    {
        a = C.a;
        b = C.b;
        data = C.data;
    }
};
int main()
{
   child c1 ,
         c2(10 , 20),
         c3(10 , 20, 30),
         c4(c3);

    auto print = [](const child &c) { cout<<c.a<<"\t"<<c.b<<"\t"<<c.data<<endl; };

    print(c1);
    print(c2);
    print(c3);
    print(c4);
}
OUTPUT 
1       2       3
10      20      3
10      20      30
10      20      30