第九周——运算符重载——项目四 向量类

本文记录了作者在实现向量类过程中遇到的问题,特别是关于运算符重载的应用。在项目实践中,作者发现向量类的输出格式出现错误,导致首个元素无法正常显示。经过调试,最终解决了这个问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

问题及代码:

/* 
*Copyright (c) 2014,烟台大学计算机学院 
*All rights reserved. 
*文件名称:lily.cpp 
*作者:李莉 
*完成日期:2015年5月5日 
*版本号:v1.0 
* 
*问题描述:实现向量类中的运算符重载, 
*程序输入:无输入 
*程序输出:如结果图 
*/  

#include <iostream>
using namespace std;
class MyVector          //定义向量类
{
public:
    MyVector(int m);    //构造函数,共有m个元素的向量,元素值预置为0
    MyVector(const MyVector &v);  //复制构造函数
    ~MyVector(); //析构函数:释放动态数组所占用的存储空间
    friend istream &operator>>(istream &input, MyVector &d);
    friend ostream &operator<<(ostream &output, const MyVector &d);
    friend MyVector operator+(const MyVector &d1,const MyVector &d2);//向量相加,对应位置上的元素相加
    friend MyVector operator-(const MyVector &d1,const MyVector &d2);//向量相减,对应位置上的元素相减
    bool operator==(const MyVector &d);//判断两个矩阵是否相等,即对应位置上的所有元素是否相等
private:
    int *Array;       //Array 为动态数组指针,指向向量占用内存的起始地址
    int num;          //向量中元素个数
};
MyVector::MyVector(int m)
{
    num=m;
    Array=new int[m];
    int i=0;
    for(i=0; i<num; i++)
    {
        Array[i]=0;
    }
}
MyVector::MyVector(const MyVector &v)
{
    num=v.num;
    if(Array!=NULL) delete []Array;
    Array=new int [v.num];
    for(int i=0; i<num; i++)
    {
        Array[i]=v.Array[i];
    }

}
MyVector::~MyVector()
{
    delete []Array;
}
istream &operator>>(istream &input,MyVector &d)
{
    cout<<"请输入"<<d.num<<"个元素的向量"<<endl;
    int i=0;
    for(i=0; i<d.num; i++)
    {
        cin>>d.Array[i];
    }
    return input;
}
ostream &operator<<(ostream &output,const MyVector &d)
{
    cout<<"(";
    cout<<d.Array[0];
    for(int i=1; i<d.num; ++i)
        output<<", "<<d.Array[i];
    cout<<")";
    return output;
}
MyVector operator+(const MyVector &d1,const MyVector &d2)
{
    MyVector d(d1.num);
    for(int i=0;i<d.num;i++)
    {
        d.Array[i]=d1.Array[i]+d2.Array[i];
    }
    return d;
}
MyVector operator-(const MyVector &d1,const MyVector &d2)
{
    MyVector d(d1.num);
    for(int i=0;i<d.num;i++)
    {
        d.Array[i]=d1.Array[i]-d2.Array[i];
    }
    return d;
}
bool MyVector::operator ==(const MyVector &d)//判断两个矩阵是否相等,即对应位置上的所有元素是否相等
{
    if(num!=d.num) return false;
    bool eq = true;
    for(int i=0; i<num; ++i)
    {
       if (Array[i]!=d.Array[i])
        {
           eq=false;
           break;
       }
       if (!eq) break;
   }
    return eq;
}
int main()
{
    MyVector d1(5),d2(5);
    cout<<"输入d1——";
    cin>>d1;
    cout<<"输入d2——";
    cin>>d2;
    cout<<"d1="<<d1<<endl;
    cout<<"d2="<<d2<<endl;
    cout<<"d1+d2="<<d1+d2<<endl;
    cout<<"d1-d2="<<d1-d2<<endl;
    cout<<"d1"<<((d1==d2)?"==":"!=")<<"d2"<<endl;
    return 0;
}


运行结果;

心得体会:

向量类的其实不难,但是就是我在输出的时候形式弄错了。。。向量中的第一个数输不出来。。纠结死了。。最后单独输出的

### Python 运算符使用指南 Python 中的运算符是编程的核心组件之一,涵盖了多种类型和功能。以下是关于 Python 运算符的具体介绍,包括其分类、用法及注意事项。 #### 1. 赋值运算符 赋值运算符用于将表达式的值分配给变量。除了简单的等于号 (=),还有复合赋值运算符,如模运算符 (%=)、指数运算符 (**=) 和向下取整除法运算符 (//=)[^1]。 - **模数和赋值 (%)** 使用 `a %= 20` 等价于 `a = a % 20`,即先计算 `a` 对 20 的余数,再将其结果重新赋值给 `a`。 - **指数和赋值 (**=)** 使用 `a **= 2` 等价于 `a = a ** 2`,表示计算 `a` 的平方并将结果赋回给 `a`[^1]。 - **向下取整并赋值 (//=}** 执行 `a //= 2` 等价于 `a = a // 2`,意味着对 `a` 执行向下取整除法后再将结果赋值给 `a`[^1]。 #### 2. 条件运算符(三元运算符) Python 支持一种简洁的形式来替代传统 `if-else` 结构,称为条件表达式或三元运算符。语法如下: ```python x = first_value if condition else second_value ``` 此结构会在满足条件时返回第一个值,否则返回第二个值。例如: ```python max_val = a if a > b else b ``` 这段代码通过单行实现了两数的最大值比较[^1]。 #### 3. 特殊运算符 特殊运算符主要用于更复杂的逻辑判断或数据操作。 - **身份运算符 (`is`, `is not`)** 这些运算符用于验证两个对象是否指向同一个内存位置,而非仅仅比较它们的内容相等性。例如: ```python a = [1, 2, 3] b = a print(a is b) # 输出 True ``` - **成员运算符 (`in`, `not in`)** 成员运算符用于检测某项是否存在特定序列中,适用于列表、字符串、集合等多种容器类型。例如: ```python letters = 'abcde' print('a' in letters) # 输出 True ``` #### 4. 运算符优先级 当一个表达式包含多个不同类型的运算符时,Python 将依据预设的优先级规则依次解析执行。通常情况下,括号内的子表达式拥有最高优先权;而诸如 lambda 表达式则处于较低层次。 #### 5. 运算符重载 Python 允许开发者针对自定义类重新定义标准运算符的行为,这一过程被称为运算符重载[^2]。例如,可以通过实现特殊的魔术方法(magic methods)使自己的对象支持加减乘除或其他常见操作。下面展示了一个简单例子——向量类支持加法运算: ```python class Vector: def __init__(self, components): self.components = components def __add__(self, other): new_components = [] for i in range(len(self.components)): new_components.append(self.components[i] + other.components[i]) return Vector(new_components) v1 = Vector([1, 2, 3]) v2 = Vector([4, 5, 6]) result = v1 + v2 print(result.components) # 输出 [5, 7, 9] ``` 在此案例中,我们通过覆盖 `__add__()` 方法赋予了矢量实例间 "+" 符号的新含义。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值