• 面向对象实验三重载


    一、实验目的     在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.运算符重载是否还可以使用其它的形式?

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

  • 相关阅读:
    【golang】interface 如此动人,却被遗忘
    SpringCloud中服务间通信方式以及Ribbon、Openfeign组件的使用
    智能家居如何融合人工智能技术
    【python】HTTP压力测试过程中遇到的问题与解决方案
    C++list模拟实现
    远程医疗解决方案-最新全套文件
    软磁材料种类、特点和应用范围
    fiddler证书下载(模拟器)
    No authorization token was found
    Unity中的静态合批、动态合批、GPU Instance 以及SRP Batching
  • 原文地址:https://blog.csdn.net/night__wind/article/details/127914325