1.
#include "stdio.h"
class A
{
public:
int _a;
A()
{
_a = 1;
}
void print()
{
printf("%d", _a);
}
};
class B : public A
{
public:
int _a;
B()
{
_a = 2;
}
};
int main()
{
B b;
b.print();
printf("%d", b._a);
while (1);
return 0;
}
请问输出是什么?
答案:12
原因:
子类存在与父类同名的成员变量,则子类屏蔽父类的同名成员变量,但给孩子类中没有定义print函数,所以会按照就近原则去寻找父类中是否有print函数。恰好父类中有这个函数,于是调用父类的print函数b.print(),而这个函数会调用父类的a变量。
若子类b中也有print函数,请问结果如何?
即题目改成下面的程序:
#include "stdio.h"
class A
{
public:
int _a;
A()
{
_a = 1;
}
void print()
{
printf("%d", _a);
}
};
class B : public A
{
public:
int _a;
B()
{
_a = 2;
}
void print()
{
printf("%d", _a);
}
};
int main()
{
B b;
b.print();
printf(&