• 面向对象实验三重载


    一、实验目的     在C语言中,每个函数都必须有其唯一的名字。对于不同类型上作不同运算而又用同样名字的情况,则称之为重载。重载分为对函数重载和对运算符重载。对重载函数必须至少在参数个数、参数类型或参数顺序上有所不同。运算符重载不改变运算顺序和优先级。有五个

    运算符不能重载,它们是  .    ::     *    ?:     #   。 也不能创造新运算符。C++规定,运算符中,参数说明都是内部类型时,不能重载。通过重载类的成员函数来掌握面向对象程序设计中的编译时多态性。

    二、实验内容

    建立一个字符串类,使用 Visual C++ 6.0 为该类添加进行比较的运算符成员函数或友元函数。

    三、实验要求

    1 .建立一个字符串类,在字符串类中定义一个有参数构造函数的和一个不带参数的构造函数;

    2 .编写对字符串进行比较、运算(<,>,==,+=,= 等)的成员函数或友元函数(通过重载运算符实现)。

    3.编制主程序,将重载运算符运用于实际的字符串比较、运算中。

    实验代码:

    //String.h

    #ifndef STRING_H_

    #define STRING_H_

    #include

    class String

    {

    private:

    char *name;

    public:

    String(){ name = new char[1]; name[0] = '\0'; }

    String(const char *n);

    bool operator<(String &os);

    bool operator>(String &os);

    bool operator==(String &os);

    String &operator+=(String &os);

    String &operator=(String &os);

    friend std::ostream &operator<<(std::ostream &os,const String &g);

    };

    #endif

    //string.cpp

    #include"String.h"

    String &String::operator+=(String &os)

    {

    int len1 = 0;

    int len2 = 0;

    len1 = strlen(name);

    len2 = strlen(os.name);

    strcat(name,os.name);

    name[len1 + len2 + 1] = '\0';

    return *this;

    }

    bool String::operator<(String &os)

    {

    if (strcmp(name, os.name) <0)

    return true;

    else

    return false;

    }

    String &String::operator=(String &os)

    {

    int len=0;

    len = strlen(os.name);

    name = new char[len + 1];

    strcpy(name,os.name);

    name[len+1]='\0';

    return *this;

    }

    bool String::operator==(String &os)

    {

    if (strcmp(name, os.name) == 0)

    return true;

    else

    return false;

    }

    bool String::operator>(String &os)

    {

    if (strcmp(name, os.name) > 0)

    return true;

    else

    return false;

    }

    std::ostream &operator<<(std::ostream &os, const String &g)//const 不能少

    {

    os << "name:" << g.name << std::endl;

    return os;

    }

    String::String(const char *n)

    {

    int len=0;

    len = strlen(n);

    name = new char[len + 1];

    strcpy(name,n);

    name[len+1]='\0';

    }

    //user.cpp

    #include"String.h"

    int main()

    {

    String a1("xiaomin");

    String a2("qiaodan");

    String a3;

    a3 = a2;//test“=”

    std::cout << a3;

    if (a1 < a2)//test "<"

    std::cout << a1;

    else

    std::cout << a2;

    if (a1 == a2)//test "="

    std::cout << a1 << "    " << a2;

    else

    std::cout << "no equal" << std::endl;

    if (a1>a2)//test">"

    std::cout << a1;

    else

    std::cout << a2;

    a3 += a1;

    std::cout << a3;

    return 0;

    }

    思考题:1.运算符重载是否还可以使用其它的形式?

    答:一般常用的两种运算符重载常用方式为成员函数重载运算符和友元函数重载运算符。

  • 相关阅读:
    C++ UDP通信
    Vue-Todolist案例
    MSPG3507——蓝牙接收数据显示在OLED,滴答定时器延时500MS
    一键搞定,火车站媒体信息发布系统解决方案
    【SLAM与多视图几何】【Fundamental Matrix】F矩阵代数推导详解
    扩散模型实战(九):使用CLIP模型引导和控制扩散模型
    数据库简单介绍 · 数据库分类 · SQL分类
    【网页设计】web前端期末大作业html+css
    C++ vector容器的介绍与使用
    golang select 机制
  • 原文地址:https://blog.csdn.net/night__wind/article/details/127914325