面向对象实验三重载

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

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

二、实验内容

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

三、实验要求

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

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

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

实验代码:

//String.h

#ifndef STRING_H_

#define STRING_H_

#include<iostream>

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

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Polices张

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值