⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 操作符的继承问题.txt

📁 里面的代码是自己写的,参考书是thingking in c++,代码有详细的说明,对学习c++语法非常有帮助!
💻 TXT
字号:

/*thinking in c++ P612
为了说明操作符的继承问题
*/
#include <iostream>
using namespace std;

class Base {
public:
	Base( int num ) : m_inum( num ){ cout << " Base's constructor called !" <<endl;}
	Base() { cout << " Base's default constructor called !" <<endl; }
	void disp() const { cout << m_inum << endl;}
	//算术运算符,被派生类继承了
	const Base operator -( const Base & right) const { return Base( m_inum - right.m_inum);}
	//条件运算符,被派生类继承了
	bool operator !=( const Base & right ) const { return m_inum != right.m_inum;}
	//带运算的赋值运算符,被派生类继承了。
	Base & operator+=( const Base & right){
		m_inum += right.m_inum;
		return * this;
	}
	//纯粹的赋值运算符
	Base & operator =( const Base & right){
		m_inum = right.m_inum;
		cout << " Base & operator =( const Base & right) " << endl;
		return * this;
	}
	Base & operator = ( int i){
		m_inum = i;
		cout << "Base & operator = ( int i)" << endl;
		return *this;
	}
private:
	int m_inum;
};

class derived : public Base {
public:
	derived( int inum , char achar ): Base(inum){ m_d = achar; }
	void dispchar() const{ cout << m_d << endl;}
private:
	char m_d;
};

int main()
{
	derived d1( 10,'1');
	derived d2( 10, '2');
    
	if ( d1 != d2)                   //operator != 被继承
		cout << "d1 != d2" << endl;
	else 
		cout << "d1 = d2 " << endl;
	
	Base b1 = d1 - d2;               //operator - 被继承,但是结果只能给Base。
    b1.disp();
	//derived d3 = d1 - d2;//error C2440: “初始化” : 无法从“const Base”转换为“derived”
    
	d1 += d2;   //ok.调用基类的 operator +=
	d1.disp();

    derived d3( 20,'3');
	d3 = d2;      //调用编译器合成的operator =函数,这个函数调用了基类的operator =.
	d3.disp();
	d3.dispchar();//输出‘2’,从d2中拷贝过来,所以说基类的赋值语句没有被继承,但是被默认地调用了
    
	//operator = ( int i) 没有被继承
	//d3 = 100;//error C2679: 二进制“=” : 没有找到接受“<未知>”类型的右操作数的运算符(或没有可接受的转换)
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -