先来看两段代码:

#include<cstdio>

int main()
{
    struct A
    {
        char mem1;
        int mem2;
    };

    struct B : A
    {
        double mem3;
    };

    B b;
    b.mem1 = 0;
    b.mem3 = 1;
    printf("%lf\\n", b.mem3);

    return 0;
}

第一段代码编译成功,并正确运行

Untitled

#include<cstdio>

int main()
{
    struct A
    {
        char mem1;
        int mem2;
    };

    class B : A
    {
        double mem3;
    };

    B b;
    b.mem1 = 0;
    b.mem3 = 1;
    printf("%lf\\n", b.mem3);

    return 0;
}

第二段代码在编译时就失败了

编译出错的原因是mem1和mem3是private的属性,无法被直接访问

Untitled

为什么会这样?

可能这两行代码就已经使一部分人费解:

struct B : A //出自第一段代码

class B : A //出自第二段代码

struct可以被继承吗?

class可以继承struct吗?

首先明确一点:以上两个问题的答案都是可以!

我们大可以将struct和class看作两个相同的东西

以下(不多赘述):

#include<cstdio>

int main()
{
    struct A
    {
        char mem1;
        int mem2;
        int add1(int a)
        {
            return a+2; //加2,以示不同
        }
    };

    struct B : A
    {
        double mem3;
        int mem4;
        double add1(double a)
        {
            return a+1;
        }
    };

    B b;
    A a;
    a.mem2 = 0;
    b.mem1 = 0;
    b.mem3 = 1;
    b.mem4 = 3;
    printf("%lf\\n", b.add1(b.mem3));
    printf("%d\\n", a.add1(b.mem2));

    return 0;
}