先来看两段代码:
#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;
}
第一段代码编译成功,并正确运行
#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的属性,无法被直接访问
为什么会这样?
可能这两行代码就已经使一部分人费解:
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;
}