面向对象实验三 重载
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
面向对象实验三重载
一、实验目的在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();
strcat(name,);
name[len1 + len2 + 1] = '\0';
return *this;
}
bool String::operator<(String &os)
{
if (strcmp(name, ) <0)
return true;
else
return false;
}
String &String::operator=(String &os)
{
int len=0;
len = strlen();
name = new char[len + 1];
strcpy(name,);
name[len+1]='\0';
return *this;
}
bool String::operator==(String &os)
{
if (strcmp(name, ) == 0)
return true;
else
return false;
}
bool String::operator>(String &os)
{
if (strcmp(name, ) > 0)
return true;
else
return false;
}
std::ostream &operator<<(std::ostream &os, const String &g)//const 不能少{
os << "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.运算符重载是否还可以使用其它的形式?
答:一般常用的两种运算符重载常用方式为成员函数重载运算符和友元函数重载运算符。