一道C++的题目,马上考试了不会写,帮下忙啦,十分感谢1
发布网友
发布时间:2023-10-19 06:24
我来回答
共2个回答
热心网友
时间:2024-12-02 15:00
#include<cmath>
#include<iostream>
using namespace std;
class Point
{
public:
Point(int x = 0, int y = 0):_x(x), _y(y) {};
Point operator+(const Point &p)
{
Point a;
a._x = _x + p._x;
a._y = _y + p._y;
return a;
}
Point operator-(const Point &p)
{
Point a;
a._x = _x - p._x;
a._y = _y - p._y;
return a;
}
int getX() {return _x;}
int getY() {return _y;}
friend double distan(Point, Point);
private:
int _x;
int _y;
};
double distan(Point a, Point b)
{
return sqrt(pow(a._x - b._x, 2.0) + pow(a._y - b._y, 2.0));
}
void main()
{
Point a(1,1), b(3,2), c;
c = b - a;
cout<<c.getX()<<','<<c.getY()<<endl;
c = b + a;
cout<<c.getX()<<','<<c.getY()<<endl;
cout<<distan(a,b)<<endl;
}
两个点要怎么比较大小我不明白,所以没有写>
热心网友
时间:2024-12-02 15:00
#include <iostream>
#include <string.h>
using namespace std;
// Rudimentary string class
class String
{
public:
// constructors
String();
String(const char *const);
String(const String &);
~String();
// overloaded operators
char & operator[](unsigned short offset);
char operator[](unsigned short offset) const;
String operator+(const String&);
void operator+=(const String&);
String & operator= (const String &);
// General accessors
unsigned short GetLen()const
const char * GetString() const
private:
String (unsigned short); // private constructor
char * itsString;
unsigned short itsLen;
};
// default constructor creates string of 0 bytes
String::String()
{
itsString = new char[1];
itsString[0] = '\0';
itsLen=0;
}
String::String(const String & rhs)
{
itsLen=rhs.GetLen();
itsString=new char[itsLen+1];
for(unsigned short i=0;i<itsLen;i++)
itsString[i]=rhs[i];
itsString[itsLen]='\0';
cout<<"the time constructor:"<<endl;
}
// private (helper) constructor, used only by
// class methods for creating a new string of
// required size. Null filled.
String::String(unsigned short len)
{
itsString = new char[len+1];
for (unsigned short i = 0; i<=len; i++)
itsString[i] = '\0';
itsLen=len;
}
// Converts a character array to a String
String::String(const char * const cString)
{
itsLen = strlen(cString);
itsString = new char[itsLen+1];
for (unsigned short i = 0; i<itsLen; i++)
itsString[i] = cString[i];
itsString[itsLen]='\0';
}
// copy constructor
// destructor, frees allocated memory
String::~String ()
{
delete [] itsString;
itsLen = 0;
}
// operator equals, frees existing memory
// then copies string and size
String& String::operator=(const String & rhs)
{
if (this == &rhs)
return *this;
delete [] itsString;
itsLen=rhs.GetLen();
itsString = new char[itsLen+1];
for (unsigned short i = 0; i<itsLen;i++)
itsString[i] = rhs[i];
itsString[itsLen] = '\0';
return *this;
}
//nonconstant offset operator, returns
// reference to character so it can be
// changed!
char & String::operator[](unsigned short offset)
{
if (offset > itsLen)
return itsString[itsLen-1];
else
return itsString[offset];
}
// constant offset operator for use
// on const objects (see copy constructor!)
char String::operator[](unsigned short offset) const
{
if (offset > itsLen)
return itsString[itsLen-1];
else
return itsString[offset];
}
// creates a new string by adding current
// string to rhs
String String::operator+(const String& rhs)
{
unsigned short totalLen = itsLen + rhs.GetLen();
String temp(totalLen);
unsigned short i;
for ( i= 0; i<itsLen; i++)
temp[i] = itsString[i];
for (unsigned short j = 0; j<rhs.GetLen(); j++, i++)
temp[i] = rhs[j];
temp[totalLen]='\0';
return temp;
}
// changes current string, returns nothing
void String::operator+=(const String& rhs)
{
unsigned short rhsLen = rhs.GetLen();
unsigned short totalLen = itsLen + rhsLen;
String temp(totalLen);
unsigned short i;
for (i = 0; i<itsLen; i++)
temp[i] = itsString[i];
for (unsigned short j = 0; j<rhs.GetLen(); j++, i++)
temp[i] = rhs[i-itsLen];
temp[totalLen]='\0';
*this = temp;
}
int main()
{
String s1("initial test");
cout << "S1:\t" << s1.GetString() << endl;
char * temp = "Hello World";
s1 = temp;
cout << "S1:\t" << s1.GetString() << endl;
char tempTwo[20];
strcpy(tempTwo,"; nice to be here!");
s1 += tempTwo;
cout << "tempTwo:\t" << tempTwo << endl;
cout << "S1:\t" << s1.GetString() << endl;
cout << "S1[4]:\t" << s1[4] << endl;
s1[4]='x';
cout << "S1:\t" << s1.GetString() << endl;
cout << "S1[999]:\t" << s1[999] << endl;
String s2(" Another string");
String s3;
s3 = s1+s2;
cout << "S3:\t" << s3.GetString() << endl;
String s4;
s4 = "Why does this work?";
cout << "S4:\t" << s4.GetString() << endl;
string ss("abcdefg");
string &rwjx=ss;
return 0;
}
怎么样,实现了多种运算符的重载.