Làm thế nào để có thể truyền int, float, double vào class PhanSo mà không phải viết lại class mới?

Em có đoạn code như sau

#include<iostream>
class PhanSo{
    int Tu, Mau;
public:
    PhanSo(int a,int b){
        Tu=a;
        Mau=b;
    }
};

int main(){
    PS ps(1,2);
    return 0;
}

Có cách nào để chuyển kiểu int về kiểu “không xác định” (:slight_smile:), mình có thể truyền vào int, float hoặc double mà không cần viết lại class mới không vậy anh chị?

Do mấy bác thắc mắc tử & mẫu của phân số phải là số nguyên nên em xin chỉnh sửa lại thành đoạn code sau:

#include<iostream>
class A {
	int a;
public:
	A() {
	}
	A(int n){
		a = n;
	}
};
int main() {
	A a[5];
	return 0;
}

Dùng template.

Demo:

Tutorial:

Mà phân số có tử số và mẫu số là số nguyên là đúng định nghĩa rồi mà?

4 Likes

Em dùng template nhưng khi khai báo mảng thì bị lỗi.

Em chỉ ví dụ thôi.

template<...>
class{...}; 
int main(){
    PS ps[5];
     return 0;
}

thì nó báo lỗi là bị sao vậy anh?

Vậy thì khoan dùng template vội, vì phải nắm vững cơ bản - lỗi template thì toàn báo loằng ngoằng rất khó tìm.

PS chỉ có hàm dựng tham số nên bạn viết ps[5] tức là gọi hàm dựng không tham số => oạch.

1 Like

Không có bác ạ. Em có viết 1 bài hoàn chình luôn rồi. Có hàm dựng, em đưa 1 đoạn code nhỏ lên đây. Khi có hàm dựng thì nó vẫn lỗi.

Hi Le Quang Cuong.
Có thực sự cần không ? Tử và mẫu phải là số nguyên. https://vi.wikipedia.org/wiki/Số_hữu_tỉ

Em chỉ lấy VD thôi bác, đang làm bài này tự nhiên thắc mắc làm sao để thêm kiểu dữ liệu khác vào được nên mới đưa bài này lên hỏi luôn.

Để em sửa lại đoạn code tí.

Có cảm giác như bạn đưa ra hai vấn đề trong cùng 1 thread: lỗi trong codebase bạn và cách dùng template.

1 Like
#include<iostream>
template<class T>
class A {
	T a;
public:
	A() {
	}
	A(T n){
		a = n;
	}
};
int main() {
	A a[5];
	a[0] = A(1);
	return 0;
}

Khi xài template xuống hàm main khai báo mảng hay 1 vector thì nó báo lỗi là sao vậy bác? Nếu như không xài template thì nó khai báo bình thường.

Type của a đâu?

A<int> a[5];
a[0] = A<int>(1);
2 Likes

Được rồi bạn, còn kiểu khai báo vector thì làm như nào nhỉ?

Thì cứ viết vào khai báo type khi khai báo vector thôi. Bản thân A<int> cũng là type (instance int của A)

std::vector<A<int>> v({
  A<int>(1),
  A<int>(2),
  A<int>(3)
});
2 Likes
83% thành viên diễn đàn không hỏi bài tập, còn bạn thì sao?