oj平台测试-重载运算符

/*Copyright (c) 2011, 烟台大学计算机学院
* All rights reserved.
* 作    者: 石尧
* 完成日期:2014 年06  月 10日
* 版 本 号:v1.0
*
* 问题描述:重载运算符。
* 样例输入:略.
* 样例输出:略。
* 问题分析:略。
*/

#include <iostream>
#include <iomanip>
using namespace std;

class Complex
{
public:
Complex():real(0),imag(0) {}
Complex(double r,double i):real(r),imag(i) {}
Complex operator+(Complex &);
Complex operator+(double &);
friend Complex operator+(double&,Complex &);
friend ostream& operator << (ostream& output, const Complex& c);
private:
double real;
double imag;
};

//将程序需要的其他成份写在下面,只提交begin到end部分的代码
//******************** begin ********************
Complex  Complex::operator+(Complex &c2)
{
   return Complex (real+c2.real,imag+c2.imag);
}
Complex Complex::operator+(double &d)
{
    return Complex (real+d,imag);
}
Complex operator+(double&d,Complex &c2)//友元函数
{
    return Complex (c2.real+d,c2.imag);
}
ostream& operator << (ostream& output, const Complex& c)
{
    if(c.imag<0)
    {
        cout<<"("<<setiosflags(ios::fixed)<<setprecision(2)<<c.real<<setiosflags(ios::fixed)<<c.imag<<"i)"<<endl;
    }
    else
    {
        cout<<"("<<setiosflags(ios::fixed)<<setprecision(2)<<c.real<<"+"<<setiosflags(ios::fixed)<<c.imag<<"i)"<<endl;
    }

    return output;
}
//********************* end ********************
int main()
{
//测试复数加复数
double real,imag;
cin>>real>>imag;
Complex c1(real,imag);
cin>>real>>imag;
Complex c2(real,imag);
Complex c3=c1+c2;
cout<<"c1+c2=";
cout<<c3;

//测试复数加实数
double d;
cin>>real>>imag;
cin>>d;
c3=Complex(real,imag)+d;
cout<<"c1+d=";
cout<<c3;

//测试实数加复数
cin>>d;
cin>>real>>imag;
c1=Complex(real,imag);
c3=d+c1;
cout<<"d+c1=";
cout<<c3;

return 0;
}


### C++ 实现姓名排序算法 为了实现姓名排序,在C++中可以利用标准模板库(STL)中的`vector<string>`来存储姓名列表,并使用`sort()`函数来进行排序。下面是一个完整的示例程序,展示了如何读取一组字符串形式的名字并对其进行升序排列[^1]。 ```cpp #include <iostream> #include <algorithm> // std::sort #include <string> #include <vector> using namespace std; // 自定义比较器,用于按字母顺序对名字进行排序 bool compareNames(const string& name1, const string& name2) { return name1 < name2; } int main() { vector<string> names = {"Alice", "Bob", "Charlie", "David"}; cout << "Before sorting:" << endl; for (const auto& name : names) { cout << name << ' '; } cout << '\n'; sort(names.begin(), names.end(), compareNames); cout << "\nAfter sorting alphabetically:\n"; for (const auto& name : names) { cout << name << ' '; } return 0; } ``` 上述代码创建了一个名为`compareNames`的布尔函数作为自定义比较器,该函数接收两个参数——待比较的名字,并返回一个布尔值表示前者是否应该排在后者之前。接着调用了`std::sort()`方法传入容器范围以及这个比较器对象完成排序操作。 对于更复杂的场景比如处理带姓氏和名字的情况或者考虑大小写敏感度等问题,则可能需要调整比较逻辑以满足具体需求[^3]。 #### 处理复杂情况下的改进措施 如果要支持更加灵活多变的数据结构如包含多个字段的对象集合时,建议采用面向对象编程的方式设计类模型,重载运算符或提供成员函数以便于定制化排序行为。例如: - 对象属性访问:通过getter/setter获取私有变量; - 运算符过载:<、<=、==等关系运算符可用于简化表达式书写; - 成员函数:可以直接在类内部定义静态/实例级别的辅助工具函数; 这些技术手段有助于增强程序可维护性和扩展性的同时也使得代码更具结构性与条理性[^2]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值