📄 操作符的继承问题.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 + -