设为首页 加入收藏

TOP

C++多态性与运算符重载(二)
2023-07-23 13:26:24 】 浏览:57
Tags:符重载
这里说明返回值是一个Complex的引用 { real++; image++; return *this; } Complex operator ++(int) //实现后置++运算符的函数成员 { Cpmplex temp(*this); real++; image++; return temp; //返回+1之前的对象temp } };

 ??示例:

??Complex c1(1.3),c2,c3;

??c2=++c1;c3=c2++;c1.Show();c2.Show();  //显示结果:c1为2+4i;c2为2+4i;c3为2+4i;

3、关系运算符 ==

将关系运算符 == 重载为复数类的函数成员,其代码如下:

bool Complex::operator ==(Complex c)
{
    return (real=c.real && image == c.image);
}

   值得注意的是,关系运算符函数的返回结果为bool型。

?示例:

??Complex c1(1.3),c2(2,4);

??if( c1 == c2 ) //结果为false

4、赋值运算符 =

??对象可以用赋值运算符 = 进行赋值。如果将赋值运算符重载为复数类的函数成员,其代码如下:

Complex & Complex::operator =(Complex c)
{
    real = c.real; image = c.image;
    return *this;  //返回赋值后当前对象的引用
}

??C++编译器通常会自动为类重载赋值运算符 “=”,程序员也可以自己编写赋值运算符函数,其功能很像拷贝构造函数。如果某个类的构造函数中动态分配了内存,除了需要为该类编写析构函数释放这些内存,程序员还要编写它的拷贝构造函数和重载赋值运算符 = ,其目的是进行深拷贝,为新建对象或别赋值对象动态再分配同样多的内存。??

??示例:

??Complex c1(1.3),c2;

??c2 = c1;c2.Show(); //显示c2为1+3i 

5、右移运算符 >>  和左移运算符 <<

??为类重载右移和左移运算符是为了直接使用cin和cout指令来输入和输出对象。这里注意只能将右移运算符和左移运算符定义为类外的友元函数。

friend istream & operator >>(istream &is,Complex &c)
friend ostream & operator <<(ostream &os,const Complex &c); //在类中声明友元函数
//下面为函数实现部分
istream & operator >>(istream &is,Complex &c)   // 键盘依次输入复数的实部和虚部
{
    is >> c.real >>c.image;
    return is;
}
ostream & operator <<(ostream &os,const Complex &c)  //显示器上显示复数
{
    os << c.real << "+" << c.image <<"i";
    return os;  
}

??示例:

? Complex obj;

? cin >>obj;  //输入:3 5 [回车]

 cout <<obj <<endl; //显示:3+5i

6、运算符重载的几点语法细则

??1) 除了条件运算符"?:"、sizeof运算符、成员运算符"."、指针运算符"*和作用域运算符“::”这五个运算符。C++其他运算符均可以被重载。

??2)重载后,运算符的优先级和结核性不会改变。

??3)重载后,运算符的操作数个数不能改变,同时至少有一个操作数是类类型。

??4) 重载后,运算符的含义应与原运算符相似,否则会给使用者造成困惑。

 

首页 上一页 1 2 下一页 尾页 2/2/2
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
上一篇Windows下打开指定目录并定位到具.. 下一篇C++类模板实现工厂模式(优化if e..

最新文章

热门文章

Hot 文章

Python

C 语言

C++基础

大数据基础

linux编程基础

C/C++面试题目