c++父类子类同名变量

当父类与子类有同名且变量时:

class Base  
{  
public:  
	int i;  

	Base()  
	{  
		printf("Base()\n");  
		i = 99;  
		amethod();  
	}  

	void amethod()  
	{  
		printf("Base.amethod()\n");  
	}  

};  

class Derived : public Base  
{  
public:  
	int i;  

	Derived() {  
		printf("Derived()\n");  
		i = -1;  
	}  

	void amethod()  
	{  
		printf("Derived.amethod()\n");  
	}  

};  

int main(int argc, char *argv[])  
{  
	Base *b = new Derived(); //Derived *b = new Derived();
	printf("%d\n",b->i);
	printf("%d\n",((Derived*)b)->i);
	b->amethod();

	return 0;
}
输出结果为:

Base()

Base.amethod()

Derived()

99

-1

Derived.amethod()

"b->i"指向的是父类的i,而"((Derived*)b)->i"指向的是子类的i。由此可见字符类中有同名成员变量的时候,用哪个变量完全是有指针类型指定的,这跟成员函数表现是不一样的。究其原因,父类的i和子类的i两个变量都在实例b中,而b的成员函数amethod()的地址是固定的只有一个,那就是Derived::amethod()。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值