Chào mừng đến với Diễn đàn lập trình - Cộng đồng lập trình.
Kết quả 1 đến 3 của 3
  1. #1
    Ngày tham gia
    Sep 2015
    Bài viết
    0

    sử khác biệt giữ String::operator += ()va String::operator +() khi sử dung char *p


    Trong String.h
    class String
    {
    char *p;
    String (int len);
    public:
    String(const char* s=""); //phuong thuc mac dinh

    String (const String &s );//phuong thuc sao chep
    ~String(); //phuong thuc huy
    //phuong thuc gan
    String &operator=(const char* s);
    String &operator=(const String &s);
    //phuong thuc nhap
    friend ostream& operator<<(ostream &os,const String &s);
    //phuong thuc xuat
    friend istream& operator>>(istream &is,String &s);
    //phuong thuc noi vao cuoi
    String& operator +=(const char* s);
    String& operator +=(const String &s);

    //phuong thuc tao chuoi moi
    String operator +(const char* s)const;
    String operator +(const String &s )const;

    #include <iostream.h>

    #include <string.h>

    #include "String.h"
    char* StrDup(const char* s)//tao 1 vung nho moi co do dai du de chep s vao
    // va tra ve con tro chi toi vung nho do
    {
    char* p= new char[strlen(s)+1];
    if(p)
    strcpy(p,s);//copy s vao vung nho p
    return p;

    }
    String::String (int len)//ham contructor
    {
    p= new char[len+1];// tao vung nho voi bo nho chep ki tu char co do dai len+1
    }
    String::String(const char* s)//phuong thuc mac dinh
    {
    p=StrDup(s);
    }
    String::String(const String &s) //phuong thuc sao chep
    {
    p=StrDup(s.p);
    }
    String::~String() //phuong thuc huy
    {
    delete[] p;
    }
    String& String:perator =(const char *s)// phuong thuc gian
    {
    if (strlen(p)== strlen(s))/eu do dai p =s
    strcpy(p,s); //coppy s vao p
    else
    delete[]p; /guoc lai xoa p

    p=strdup(s); // con tr p tao vung nho moi bang do dai cua s
    return *this; //tra ve gt con tr p chi vao vung nho
    }
    String& String:perator =(const String &s)
    {
    if (this!= &s) // neu v tri ctro chi vao khac voi vtr doi tuong s
    *this =s.p; // gtr con tro nay = gtr con tro chi toi s
    return *this; // tra ve gt con tro
    }
    ostream& operator<<(ostream &os,const String& s)
    {
    os<<s.p;
    return os;

    }
    istream& operator>>(istream &is,String &s)
    {
    const int BUF_LEN=255;//ham hang co toi da 255 ki tu
    char buffer[BUF_LEN];/oi dung
    is.getline(buffer,BUF_LEN+1);//lay noi dung voi do dai
    s=buffer;
    return is;
    }
    String& String:perator +=(const char *s)
    {



    }
    /*String& String:perator +=(const String &s)
    {



    }*/
    String String:perator+(const char* s)const
    {
    String res(strlen(p)+strlen(s));

    strcpy(res.p,p);
    strcat(res.p,s);
    return res;
    }
    String String:perator +(const String &s)const
    {
    return *this + s.p;

    }


    cho mình hỏi về Operator += ,operator+ trong bai này mình hiểu như sau ko biết có đúng ko
    String& String:perator +=(const char *s)?
    {
    KO TAO RA VÙNG NHƠ MỚI MÀ CỘNG DỒN LẠI ?
    NHƯNG KO BIẾT VIẾT NHƯNG THẾ NÀO
    }
    String& String:perator +=(const String &s)?
    String String:perator+(const char* s)const
    {
    TẠO RA 1 ĐỐI TƯỢNG CÓ ĐỘ DÀI BẰNG VỚI ĐỘ DÀI CON TRỎ CŨ VÀ ĐỘ DÀI CON TRỎ MỚI
    SAU ĐÓ COPY CON TRỎ CŨ VÀO ĐỐI TƯỢNG CÓ CON TRỎ MỚI TẠO VÀ CỘNG CON TRỎ CÂN CỘNG
    }
    String String:perator +(const String &s)const KO HIỂU
    MÌNH THỰC KO PHÂN BIỆT GIỮA String& String:perator +=(const String &s) VÀ
    String& String:perator +=(const char *s) CŨNG NHƯ String& String:perator +=(const String &s) VÀ String String:perator+(const char* s)const
    .
    CÁC BẠN ,ANH CHỊ NÀO HIỂU RÕ NÓ THÌ NÓ RÕ DÙM MÌNH .THANKS.

  2. #2
    Ngày tham gia
    Sep 2015
    Bài viết
    0
    Trích dẫn Gửi bởi quano1
    thật lòng mà nói thì có cần phải hiểu rõ string += string != string += const char * không?
    mình nghĩ một số hàm người ta xây dựng sẵn có lẽ không nên hiểu quá sâu mà chỉ nên hiểu vừa đủ để có thể dùng + biến đổi thôi.
    nên dành thời gian tìm hiểu những thứ khác cần thiết hơn bởi lẽ nếu cứ đi sâu như vậy thì có khi đến 100 tuổi chưa chắc đã hết những thắc mắc kiểu như này
    Mình không biết quan niệm bạn như thế nào như mình chỉ biết mình cần phải hiểu được vấn đề có thể làm bài tập được huống chi là mình đang học lập trình nếu mình sai chỗ nào thì chương trình sẽ ko chạy ,câu hỏi của mình thích đâu có sâu xa gì đâu , chỉ tại mình không hiểu thôi. Thanks bạn góp
    ý . Các anh nào biết chỉ dùm em.

  3. #3
    Ngày tham gia
    Sep 2015
    Bài viết
    0
    Trích dẫn Gửi bởi sasadudu
    cho mình hỏi về Operator += ,operator+ trong bai này mình hiểu như sau ko biết có đúng ko
    String& String:perator +=(const char *s)?
    {
    KO TAO RA VÙNG NHƠ MỚI MÀ CỘNG DỒN LẠI ?
    NHƯNG KO BIẾT VIẾT NHƯNG THẾ NÀO
    }
    String& String:perator +=(const String &s)?
    String String:perator+(const char* s)const
    {
    TẠO RA 1 ĐỐI TƯỢNG CÓ ĐỘ DÀI BẰNG VỚI ĐỘ DÀI CON TRỎ CŨ VÀ ĐỘ DÀI CON TRỎ MỚI
    SAU ĐÓ COPY CON TRỎ CŨ VÀO ĐỐI TƯỢNG CÓ CON TRỎ MỚI TẠO VÀ CỘNG CON TRỎ CÂN CỘNG
    }
    String String:perator +(const String &s)const KO HIỂU
    MÌNH THỰC KO PHÂN BIỆT GIỮA String& String:perator +=(const String &s) VÀ
    String& String:perator +=(const char *s) CŨNG NHƯ String& String:perator +=(const String &s) VÀ String String:perator+(const char* s)const
    .
    CÁC BẠN ,ANH CHỊ NÀO HIỂU RÕ NÓ THÌ NÓ RÕ DÙM MÌNH .THANKS.
    khác hẳn nhau ở cái truyền vào
    1 cái là base str : char *
    1 cái là waper class : string


    khác nhau ở bản chất
    1 cái chỉ đọc dữ liệu, const method
    1 cái là phương thức có khả năng thay đổi dữ liệu lớp

 

 

Quyền viết bài

  • Bạn Không thể gửi Chủ đề mới
  • Bạn Không thể Gửi trả lời
  • Bạn Không thể Gửi file đính kèm
  • Bạn Không thể Sửa bài viết của mình
  •