现在的位置: 首页 > 综合 > 正文

C++赋值号能否被继承

2013年03月03日 ⁄ 综合 ⁄ 共 705字 ⁄ 字号 评论关闭

    在C++中,普通函数能够被继承,但是析构函数和构造函数不能被继承。这里有个问题,C++赋值号能否被继承?

    看以下代码:

   

#include <iostream>

using namespace std;

class A{
public:
	A() { 
		a = 0;
		cout<<"A::A()"<<endl; 
	}     

	A & operator =(A &aa)	{
		cout<<"A:="<<endl;
		this->a = aa.a;
		return *this;
	}
	int a;
};
class B:public A{
public:
	B() {
		i=1;
		cout<<"B::B()"<<endl;
	}
	public:
	int i;
}; 
int main(void){

	A a, b;
	a.a = 100;
	b.a = 200;
	a = b;
	cout<<a.a<<endl;

	
	B b1, b2;
	b1.a = 1;
	b1.i = 10;
	b2.a = 2;
	b2.i = 20;
	cout <<"***************"<<endl;
	b1 = b2;
	cout<<"b1.a: "<<b1.a<<" "<<"b1.i "<<b1.i<<endl;
	return 0;

观察输出结果:

可以看到没有出错,调用的是A类的重载赋值号方法,而且赋值成功。按理说A类只对A的属性进行赋值号重载,返回A对象,B类的属性应该没有值才对。这是为什么呢?原因是系统自动生成了赋值符号,即使B类没有对赋值号重载,一样可以赋值成功。

我们再在类B内对赋值号进行重载,代码如下:

B& operator =(B &bb){
		cout<<"B:="<<endl;
		this->a = bb.a;
		this->i = bb.i;

		return *this;
	}

再观察输出结果:

 

 

此时调用的是B类的重载赋值号方法。

抱歉!评论已关闭.