实验2 运算符重载
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
mystring operator + (const mystring &s1); friend int operator < (const mystring s1, const mystring s2);
private: char m_data[100];
};
// 用于保存字符串
mystring::mystring(const char *str) {
#include <iostream> using namespace std; class set { private:
float x[20]; int size; public: int include(float e, int n)//元素e已在集合x中,则返回1,否则返回0
6
{ int flag = 0;
5. 以下程序通过重载运算符+、*实现集合(用数组表示)的并(∪)、交(∩)运算。 集合中的元素不能相同。两个集合的并包含了两个集合的所有元素。两个集
合的交仅包含两个集合中共同存在的元素。设 s1={1,2,3,4,5,6},s2={3, 5,7,9,11}。s1∪s2={1,2,3,4,5,6,7,9,11},s1∩s2={3,5}。
2
float length; float width; }; int rect::operator == (rect r) { if ((length * width) == (r.length * r.width)) return 1; else return 0; } int rect::operator > (rect r) { if ((length * width) > (r.length * r.width)) return 1; else return 0; } int rect::operator < (rect r) { if ((length * width) < (r.length * r.width)) return 1; else return 0; } int main() { rect r1(10, 20), r2(20, 20); r1.area(); r2.area(); if(r1 == r2) cout << "两个矩形面积相等!" << endl; else if(r1 > r2) cout << "第一个矩形的面积较大!" << endl; else if(r1 < r2) cout << "第二个矩形的面积较大!" << endl; }
int operator < (const mystring s1, const mystring s2) {
if(strcmp(s1.m_data, s2.m_data) <= 0) return 1;
else return 0;
}
int main() {
mystring s1("Hello,"), s2("world!"), s3; s1.display(); s2.display(); s3.display(); s3 = s1 + s2; s3.display(); cout << (s1 < s2) << endl; }
int x, y; public:
point(int i = 0, int j = 0) {x = i; y = j;} point operator + (point pnt); point operator ++ (); void print() {cout << x << " " << y << endl;} }; point point::operator ++ () { point p; p.x = x + 1; p.y = y + 1; return p; } point point::operator + (point pnt) { point p; p.x = x + pnt.x; p.y = y + pnt.y; return p; } int main() { point p1(1, 2), p2(3, 4); p1 = p1 + p2; p1.print(); p1 = ++p1; p1.print(); }
友元函数方法:
#include <iostream> using namespace std ; class rect {
public: rect(float i = 0, float j = 0) {length = i; width = j;}
3
~rect() {} void area() {cout << length * width << endl;} friend int operator == (rect r1, rect r2); friend int operator < (rect r1, rect r2); friend int operator > (rect r1, rect r2); private: float length; float width; }; int operator == (rect r1, rect r2) { if ((r1.length * r1.width) == (r2.length * r2.width)) return 1; else return 0; } int operator > (rect r1, rect r2) { if ((r1.length * r1.width) > (r2.length * r2.width)) return 1; else return 0; } int operator < (rect r1, rect r2) { if ((r1.length * r1.width) < (r2.length * r2.width)) return 1; else return 0; } int main() { rect r1(10, 20), r2(20, 20); r1.area(); r2.area(); if(r1 == r2) cout << "两个矩形面积相等!" << endl; else if(r1 > r2) cout << "第一个矩形的面积较大!" << endl; else if(r1 < r2) cout << "第二个矩形的面积较大!" << endl; }
for(int i = 0; i < n; i++) if(x[i] == e) { flag = 1; break; }
return flag; }
set(float a[], int n) {
x[0] = a[0]; size = 1; for(int i = 1; i < n; i++)
if(include(a[i], size) == 0) {
3. 在 point 类中定义一个运算符函数,用于两个对象 a 和 b 相加,其结果为一
4
个 point 类对象 c,c 中的 x 和 y 分别为对象 a 和 b 的 x 和 y 的和。(+操作 符作为成员函数重载)
#include <iostream> using namespace std; class point {
return size; } void pri来自百度文库t() {
for(int i = 0; i < size; i++) cout << x[i] << " ";
cout << endl << "size = " << size << endl; } };
set set::operator + (set a)
} set set::operator * (set a) {
set tem; tem.size=0; for(int i = 0; i < size; i++)
if(NULL == str) {
*m_data = '\0'; } else {
strcpy(m_data, str); } }
1
mystring mystring::operator+ (const mystring &s1) {
mystring s; strcpy(s.m_data,m_data); strcat(s.m_data,s1.m_data); return s; }
2. 编写一个矩形类 rect,分别采用友元函数的方式重载和成员函数的方式重载 运算符<、>、==,用于比较两个矩形面积是否相等。
成员函数方法:
#include <iostream> using namespace std; class rect { public:
rect(float i = 0, float j = 0) {length = i; width = j;} ~rect() {} void area() {cout << length * width << endl;} int operator == (rect r); int operator < (rect r); int operator > (rect r); private:
5
{ int x, y;
public: point(int i = 0, int j = 0) {x = i; y = j;} friend point operator + (point p1, point p2); friend point operator ++ (point p); void print() {cout << x << " " << y << endl;}
}; point operator + (point p1, point p2) {
point p; p.x = p1.x + p2.x; p.y = p1.y + p2.y; return p; } point operator ++(point p) { p.x++; p.y++; return p; } int main() { point p1(1, 2), p2(3, 4); p1 = p1 + p2; p1.print(); p1 = ++p1; p1.print(); }
4. 在 point 类中定义一个运算符函数,用于两个对象 a 和 b 相加,其结果为一 个 point 类对象 c,c 中的 x 和 y 分别为对象 a 和 b 的 x 和 y 的和。(+操作 符作为友元函数重载)
#include <iostream> using namespace std; class point
#include <string>
using namespace std ;
class mystring
{
public:
mystring( const char *str = NULL);
~mystring() {}
// 析构函数
void display() {cout << m_data << endl;}
7
{ set tem; for(int i = 0; i < size; i++) tem.x[i] = x[i]; tem.size = size; for(int i = 0; i < a.size; i++) if(tem.include(a.x[i], tem.size) == 0) tem.x[tem.size++] = a.x[i]; return tem;
(x[size]=a[i]); size++; } }
set() { size = 0; }
set operator + (set); set operator * (set); set operator = (set); int getset(float y[]) {
for(int i = 0; i < size; i++) y[i] = x[i];
实验二 运算符重载
一、实验目的
理解重载运算符的作用,学会对典型的运算符进行重载。
二、实验内容
(一)程序示例
1. 编写程序重载字符串运算符 +、< 分别用于字符串的拼接、比较运算,实现
字符串直接操作。其中: < 运算符重载函数为友元函数,而 + 运算符重载
为成员函数。
#include <iostream>