Khai báo hàm khởi tạo của đối tượng chứa tham số truyền vào?

Hi mn,
e đang muốn sử dụng hàm khởi tạo, e chỉ có thể gọi được void xemmh() mặc định cho xaukytu x nhưng giờ muốn tạo void xemmh() cho xaukytu y thì phải khai báo và sử dụng như nào ạ? Mn giúp đỡ, e cảm ơn ạ.

Đây là code hiện tại:

#include <iostream>
#include <string.h>
using namespace std;


class xaukytu{
	private:
	char *a;
	int n;
	public:
		xaukytu(){
			a="";
		}
		xaukytu(const char s[]){
	 	int i = 0;
	 	a = new char[i];
	 	do{
	 		a[i]=s[i];
		 }while(s[i++] !='\0');
		}
		void xemmh(){
			cout<<"Xau ky tu rong: "<<a<<endl;
		}
};

main(){

xaukytu x;
x.xemmh();
xaukytu y("test123");

}

Khá ổn rồi bạn, có điều bạn nên để ý chỗ :point_down:

Không thể gán cho a (con trỏ) một giá trị là chuỗi.

Bạn có thể sửa thành a[0] = '\0';

Đây nữa, sao lại để new char[i]? :point_right: a = new char[strlen(s)];

Gọi hàm như bạn là đúng rồi.
test main()

xaukytu x;
x.xemmh();
xaukytu y("test123");
y.xemmh();

out:

Xau ky tu rong:
Xau ky tu rong: test123
4 Likes

tks b, vì bài tập của mình không cho dùng các hàm trong thư viện string nên k dùng strlen đc, có cách nào khác k bạn?

Thì bạn tự build hàm đó luôn. Đơn giản mà. :slight_smile:

int slen(const char *s) {
    int i = 0;
    while (s[i] != '\0') i++;
    return i;
}
3 Likes

Có gì không ổn. i++ hay ++i?

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