Tôi có một lớp được gọi là AString
. Nó là khá cơ bản:Làm thế nào để quá tải toán tử ==() cho một con trỏ đến lớp?
class AString
{
public:
AString(const char *pSetString = NULL);
~AString();
bool operator==(const AString &pSetString);
...
protected:
char *pData;
int iDataSize;
}
Bây giờ tôi muốn viết mã như thế này:
AString *myString = new AString("foo");
if (myString == "bar") {
/* and so on... */
}
Tuy nhiên, các nhà điều hành so sánh hiện tại chỉ hỗ trợ
if (*myString == "bar")
Nếu tôi bỏ qua dấu đó, trình biên dịch không hài lòng.
Có cách nào để cho phép toán tử so sánh so sánh *AString
với const char*
không?
Tại sao bạn phân bổ động 'myString'? Tại sao không phải là 'operator ==' một 'const' thành viên? Hay tốt hơn, tại sao nó lại là một thành viên? Hoặc thậm chí tốt hơn, tại sao bạn đang viết lớp chuỗi của riêng bạn? – sbi
(1) Tôi không nên. Đó là một lỗi. (2) bạn có thể giải thích về điều đó không? (3) Tại sao nó không phải là một thành viên? (4) Bởi vì nền tảng đích là một hệ thống nhúng không có lớp chuỗi gốc. – bastibe
2. Nếu bạn không làm cho nó const sau đó nó sẽ không làm việc cho const AString: s, 3. Bởi vì nó không cần phải là một thành viên và sẽ dẫn đến đóng gói tốt hơn, 4, những gì bạn có nghĩa là không có "chuỗi bản địa lớp học"? bạn có std :: string. – ronag