可以在C ++中继承struct
吗?
答案 0 :(得分:263)
是的,struct
与class
完全相同,但public
的默认辅助功能为struct
(而private
为class
)。
答案 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