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

3 Likes

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

3 Likes

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

3 Likes

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 ạ

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