zoukankan      html  css  js  c++  java
  • C++之重写运算符练习

     1 #include<iostream>
     2 #include<string>
     3 using namespace std;
     4 
     5 class MyString{
     6 private:
     7     char* cp;
     8 public:
     9     MyString(char*);
    10     ~MyString();
    11     MyString(MyString&ms);
    12     MyString& operator +(MyString&);
    13     MyString&operator=(MyString&);
    14     MyString&operator+=(MyString&);
    15     char operator[](int i);
    16     char* getP();
    17 
    18 };
    19 MyString::MyString(char*cp=NULL):cp(cp){
    20 }
    21 MyString::~MyString(){}
    22 MyString::MyString(MyString&ms){//深复制
    23     int len = strlen(ms.cp);//先确定原来字符串长度
    24     char*tempcp = new char[len+1];//开辟足够的空间
    25     strcpy(tempcp,ms.cp);//复制相同的内容
    26     cp = tempcp;//初始化对象的指针
    27 }
    28 
    29 MyString& MyString:: operator +(MyString&ms){
    30     int len = strlen(cp) + strlen(ms.cp);
    31     char *tempcp = new char[len+1];
    32     strcpy(tempcp,cp);
    33     strcat(tempcp,ms.cp);
    34     
    35     return *(new MyString(tempcp));//不改变两边对象的内容,返回一个新的对象
    36 }
    37 MyString&MyString::operator=(MyString&ms){
    38     if (cp == NULL || strlen(cp) < strlen(ms.cp)){
    39         if (cp){
    40             delete[] cp;//释放原来的小空间
    41         }
    42         cp = new char[(strlen(ms.cp) + 1)];//开辟足够的空间
    43     }
    44     cp=strcpy(cp, ms.cp);//复制内容
    45     return *this;
    46 }
    47 MyString& MyString::operator+=(MyString&ms){
    48 
    49     char*tempcp = cp;//暂存cp,因为要重新开辟空间//如果直接使strcat空间不够会出错
    50     cp = new char[strlen(cp)+strlen(ms.cp)+1];
    51     strcpy(cp,tempcp);
    52     strcat(cp,ms.cp);
    53     
    54     return *this;
    55 }
    56 char MyString::operator[](int i){
    57     return cp[i];
    58 }
    59 char*MyString::getP(){//用于主函数中查看对象内容
    60     return cp;
    61 }
    62 int main(){
    63     MyString ms1("hello"),ms2("world");
    64     cout << "+result:" << (ms1 + ms2).getP() << endl;
    65     ms1 += ms2;
    66     cout << "+=result:" << ms1.getP() << endl;
    67     ms1 = ms2;
    68     cout << "=result:" << ms1.getP() << endl;
    69     cout << "[]result:" << ms1[0] << endl;
    70 
    71 }

     1 #include<iostream>
     2 
     3 using namespace std;
     4 
     5 class Point{
     6 public:
     7     Point& operator ++();
     8     Point operator ++(int);
     9     Point&operator --();
    10     Point operator --(int);
    11     Point(){ _x = _y = 0; }
    12     int x(){ return _x; }
    13     int y(){ return _y; }
    14 private:
    15     int _x, _y;
    16 };
    17 Point& Point::operator ++(){
    18     _x++;
    19     _y++;
    20     return *this;
    21 }
    22 Point Point::operator ++(int){
    23     Point temp = *this;
    24     ++*this;
    25     return temp;
    26 }
    27 
    28 Point& Point::operator --(){
    29     _x--;
    30     _y--;
    31     return *this;
    32 }
    33 Point Point::operator --(int){
    34     Point temp = *this;
    35     --*this;
    36     return temp;
    37 }
    38 
    39 void main(){
    40     Point A;
    41     cout << "A的值为" << A.x() << "," << A.y() << endl;
    42     A++;
    43     cout << "A的值为" << A.x() << "," << A.y() << endl;
    44     ++A;
    45     cout << "A的值为" << A.x() << "," << A.y() << endl;
    46     A--;
    47     cout << "A的值为" << A.x() << "," << A.y() << endl;
    48     --A;
    49     cout << "A的值为" << A.x() << "," << A.y() << endl;
    50     
    51 
    52 }

    //使用全局函数重载

     1 #include<iostream>
     2 using namespace std;
     3 
     4 class Point{
     5 private:
     6     int x;
     7     int y;
     8 public:
     9     Point(int x, int y):x(x),y(y){}
    10     friend Point& operator+(Point&one,Point& two);
    11     int getX(){ return x; }
    12     int getY(){ return y; }
    13 };
    14 
    15 Point& operator+(Point&one, Point& two){
    16     int x = one.x + two.x;
    17     int y = one.y + two.y;
    18     return *new Point(x,y);
    19 }
    20 
    21 int main(){
    22     Point p1(1,1),p2(2,2);
    23     Point& result = p1 + p2;
    24     cout << result.getX() << ":" << result.getY();
    25     return 0;
    26 }

  • 相关阅读:
    ehcache 的 配置文件: ehcache.xml的认识
    Hibernate的二级缓存(SessionFaction的外置缓存)-----Helloword
    QBC检索和本地SQL检索
    HQL的检索方式
    HQL的第一个程序
    Ubuntu Error: No module named 'apt_pkg' 怎么办?
    Linux 后台运行python .sh等程序,以及查看和关闭后台运行程序操作
    ubuntu install redis/mongo 以及 监控安装
    Mac 上的 redis
    Mac 解决硬盘插入不能写的问题
  • 原文地址:https://www.cnblogs.com/abtious/p/12796776.html
Copyright © 2011-2022 走看看