Struct inheritance in C++

后端 未结 6 635
情书的邮戳
情书的邮戳 2020-12-02 05:28

Can a struct be inherited in C++?

相关标签:
6条回答
  • 2020-12-02 05:44

    Of course. In C++, structs and classes are nearly identical (things like defaulting to public instead of private are among the small differences).

    0 讨论(0)
  • 2020-12-02 05:51

    Other than what Alex and Evan have already stated, I would like to add that a C++ struct is not like a C struct.

    In C++, a struct can have methods, inheritance, etc. just like a C++ class.

    0 讨论(0)
  • 2020-12-02 05:54

    Yes, c++ struct is very similar to c++ class, except the fact that everything is publicly inherited, ( single / multilevel / hierarchical inheritance, but not hybrid and multiple inheritance ) here is a code for demonstration

    #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

    0 讨论(0)
  • 2020-12-02 05:57

    In C++, a structure's inheritance is the same as a class except the following differences:

    When deriving a struct from a class/struct, the default access-specifier for a base class/struct is public. And when deriving a class, the default access specifier is private.

    For example, program 1 fails with a compilation error and program 2 works fine.

    // 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;
    }
    
    0 讨论(0)
  • 2020-12-02 05:58

    Yes. The inheritance is public by default.

    Syntax (example):

    struct A { };
    struct B : A { };
    struct C : B { };
    
    0 讨论(0)
  • 2020-12-02 06:05

    Yes, struct is exactly like class except the default accessibility is public for struct (while it's private for class).

    0 讨论(0)
提交回复
热议问题