30/09/2018, 18:21

Lỗi no appropriate defauult constructor available khi làm việc với class

‘’’

#define _CRT_SECURE_NO_WARNINGS
#include <iostream>
#include <string>

using namespace std;

class Nguoi{
protected:
	char hoTen[50];
	int namSinh;
private:
	char soThich[50];
public:
	Nguoi(char ten[], int ns, char s[]){
		strcpy(hoTen, ten);
		namSinh = ns;
		strcpy(soThich, s);
	}
	void Init();
};

class HocSinh : public Nguoi{
protected:
	int msHS;
public:
	void Init();
	void Nhap();
};

void Nguoi::Init(){
	cout << namSinh << endl;
	cout << hoTen << endl;
	cout << soThich << endl;
}

void HocSinh::Init(){
	cout << msHS << endl;
	cout << namSinh << endl;
	cout << hoTen << endl;
}

void HocSinh::Nhap(){
	cout << "Nhap ho ten: ";
	gets(hoTen);
	cout << "Nhap nam sinh: ";
	cin >> namSinh;
}

int main(){
	Nguoi people("Phan Thanh Nam", 1996, "code and game");
	people.Init();
	HocSinh student;
	student.Nhap();
	student.Init();
	system("pause");
	return 0;
}

‘’’

nó báo rằng no appropriate defauult constructor available… em không hiểu tại sao? lẽ nào em hàm khởi tạo của class Nguoi em làm sai ??

viết 20:26 ngày 30/09/2018

thiếu default constructor cho class Nguoi.

đơn giản là thêm
Nguoi() { hoten[0] = '\0'; namSinh = 0; }

vì HocSinh kế thừa Nguoi, mà trong HocSinh ko có constructor => compiler sẽ tự động tạo default ctor, đại khái như thế này:
HocSinh() : Nguoi() {}
trong đó nó khởi tạo Nguoi trước khi khởi tạo HocSinh, và xài default ctor của class Nguoi => ko có default ctor => lỗi. Trong class Nguoi compiler ko tự tạo default ctor vì đã có 1 ctor rồi.

Phan Thành Nam viết 20:31 ngày 30/09/2018

giả sử như trong class Nguoi mình không tạo default constructor thì trong class HocSinh mình phải tạo ctor tương tự với kiểu ctor của class Nguoi, như thế này:
‘’’

public:
        HocSinh(char a[], int b, char c[]){
                    ......
        }

‘’’
phải không ạ… hay sai??

viết 20:30 ngày 30/09/2018

đúng nhưng phải khởi tạo base class Nguoi trước khi vào thân hàm {} của HocSinh ctor:

HocSinh(char a[], int b, char c[])
: Nguoi(a, b, c) 
{
  .....
}

nhưng dòng
HocSinh student;
trong main thì đòi hỏi HocSinh phải có default ctor, nên có viết ctor trên cho class HocSinh thì nó cũng báo lỗi, lần này là lỗi HocSinh ko có default ctor…

Bài liên quan
0