Constructor với tham số đầu vào kiểu char
Mọi người cho e hỏi chỗ hàm khởi tạo MyString(char a[20]) nên sửa như thế nào để phía dưới MyString(“ABC”) có thể chạy được ạ. E cảm ơn nhiều ạ
Sao bạn phải dùng char* s; trong trường hợp này có vẻ như std::string tốt hơn, trừ phi bài tập yêu cầu không được dùng std::string
dạ đúng rồi ạ. Đề bài yêu cầu dùng char* s ạ.
note cho câu trả lời của mình: lần cuối mình code C++ là tầm 5 năm về trước rồi. Bạn thử trước nhé.
Nếu như vậy thì bạn phải dùng const char* a để có thể nhận vào chuỗi “ABC” hoặc các chuỗi tương tự. Các chuỗi dạng như “ABC” gọi là chuỗi hằng trong C++ nên mình phải dùng const char*
Trong Constructor mình phải tính ra chiều dài của a rồi cấp phát bộ nhớ cho *s bằng với chiều dài của a.
Sau đó mới có thể dùng strcpy_s
Trong Destructor(hàm huỷ) mình phải huỷ bộ nhớ cấp phát cho s
dạ e cảm ơn nhiều ạ.
Code của bạn thiếu nhiều chỗ nên mình giúp cho một cái code mẫu ở đây để cho bạn làm theo cho nhanh
Code dưới đây mình đã làm constructor và << operator. Bạn cần phải làm tiếp destructor nữa.
#include <iostream>
#include <cstring>
using namespace std;
class MyString
{
private:
char* s;
public:
MyString() {};
MyString(const char* input) {
auto len = sizeof input;
this->s = new char[len];
// strcpy_s(this->s, len, input); // khong hieu sao compiler khong nhan ra ham strcpy_s
strcpy(this->s, input); // nen minh dung strcpy
}
friend ostream & operator << (ostream &out, const MyString &ms) {
out << ms.s;
return out;
}
};
int main() {
MyString s1("abc");
cout << s1;
return 0;
}
Link tới editor mình dùng https://ideone.com/aHXbmY
dạ vâng e cảm ơn nhiều ạ. Thật ra code e đưa lên chỉ là cắt ra chứ e đã viết << operator và destructor rồi ạ


83% thành viên diễn đàn không hỏi bài tập, còn bạn thì sao?