[C++笔试]类及继承的题目

本文探讨了C++中的类与继承概念。在一道笔试题中,解释了子类如何屏蔽父类的同名成员变量,并详细分析了在不同情况下构造函数的调用顺序和规则。通过具体的例子,展示了当子类不存在特定函数时,会查找父类的函数进行调用,以及如何判断构造函数的执行情况。
摘要由CSDN通过智能技术生成

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(&
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值