30/09/2018, 16:15

Cần hỏi đáp về class?

Khi tạo class thường có 2 file là .h và .cpp (Visual studio) và 1 file .cpp của main.
File .h dùng khai báo thư viện, class, ngoài ra còn dùng để làm gì nữa không ?
File .cpp chỉ dùng để viết các hàm ?

Điều em cần hỏi:
Ví dụ: Xây dựng cấu trúc sinh viên. Nhập xuất sinh viên. Tìm điểm trung bình cao nhất. Tạo class tên (SinhVien)

Tạo 1 sinh viên, nhập xuất thì em đã biết, nhưng tạo 1 mảng sinh viên, thì mình phải khai báo 1 mảng sinh viên và khai báo số lượng sinh viên thì mình phải viết ở file nào. Rồi bên file main.cpp phải làm thế nào để xuất ra.

Em chả biết làm sao nói rõ, đây là code của em viết

File main.cpp


//Truy xuất đến file SinhVien.h
#include "SinhVien.h"

void NhapSV(SinhVien *SV, int n)
{
	std::cout << " 
====== NHAP THONG TIN SINH VIEN ====== 
";
	for (int i = 0; i < n; i++)
	{		
		std::cout << "
Nhap thong tin sinh vien thu: " << i + 1 << std::endl;
		SV[i].NhapThongTinSV();
	}
}

void XuatSV(SinhVien *SV, int n)
{
	std::cout << " 
====== THONG TIN SINH VIEN ====== 
";
	for (int i = 0; i < n; i++)
	{		
		std::cout << "
Thong tin sinh vien thu: " << i + 1 << std::endl;
		SV[i].XuatThongTinSV();
	}
}

int main()
{
	int n;
	std::cout << "
Nhap so Sinh vien: ";
	std::cin >> n;
	SinhVien *SV = new SinhVien[n];
	NhapSV(SV, n);
	XuatSV(SV, n);
	delete []SV;
	system("pause");
	return 0;
}

File SinhVien.cpp


//Truy xuất đến tập tin SinhVien.h
#include "SinhVien.h"

//Cú pháp cài đặt phương thức: <Kiểu dữ liệu> <Tên đốitượng> :: <Tên phương thức> 
//														(<Danh sách tham số nếu có>)

//Muốn cập nhật lại giá trị cho 1 biến trong class ta sử dụng get/set
//VD: Cập nhật lại tên
//void SinhVien::SetHoTen(std::string Name)
//{
//	HoTen = Name;
//}
//std::string SinhVien::GetHoTen()
//{
//	return HoTen;
//}

std::string ChuanHoaHoTen(std::string &HoTen)
{
	//Xóa khoảng trắng ở đầu
	while (HoTen[0] == ' ')
	{
		HoTen.erase(0, 1);
	}
	//Xóa khoảng trắng ở giữa
	for (int i = 0; i < HoTen.length() - 1; i++)
	{
		if (HoTen[i] == ' ' && HoTen[i + 1] == ' ')
		{
			HoTen.erase(i, 1);
			i = 0;
		}
	}
	//Xóa khoảng trắng ở cuối
	if (HoTen[HoTen.length() - 1] == ' ')
	{
		HoTen.erase(HoTen.end() - 1);
	}
	//Đổi ký tự đầu tiên của mỗi từ thành in hoa
	HoTen[0] = toupper(HoTen[0]);
	for (int i = 1; i < HoTen.length(); i++)
	{
		if (HoTen[i] == ' ' && HoTen[i + 1] != ' ')
		{
			HoTen[i + 1] = toupper(HoTen[i + 1]);
		}
	}
	return HoTen;
}

void SinhVien::NhapThongTinSV()
{
	fflush(stdin);
	std::cout << "
Nhap ho ten: ";
	getline(std::cin, HoTen);
	HoTen = ChuanHoaHoTen(HoTen);
	do 
	{
		std::cout << "
Nhap tuoi: ";
		std::cin >> Tuoi;
		if (Tuoi < 18 || Tuoi > 50)
		{
			std::cout << "
Nhap sai tuoi, nhap lai: ";
		}
	} while (Tuoi < 18 || Tuoi > 50);
	do 
	{
		std::cout << "
Nhap vao diem trung binh: ";
		std::cin >> DiemTrungBinh;
		if (DiemTrungBinh < 0 && DiemTrungBinh > 10)
		{
			std::cout << "
Nhap sai diem trung binh, nhap lai";
		}
	} while (DiemTrungBinh < 0 && DiemTrungBinh > 10);
	
}

void SinhVien::XuatThongTinSV()
{
	std::cout << "
Ho va ten: " << HoTen;
	std::cout << "
Tuoi: " << Tuoi;
	std::cout << "
Diem trung binh: " << DiemTrungBinh;
}

SinhVien::SinhVien(void)
{
}

SinhVien::~SinhVien(void)
{
}

File SinhVien.h

#pragma once	//Tránh bị đụng độ khi khai báo thư viện ở các đối tượng

//Khai báo thư viện ở đây, sử dụng cho toàn bộ chương trình
#include <iostream>
#include <string>

//Khai báo class
class SinhVien
{
private:
	std::string HoTen;	
	int Tuoi;
	float DiemTrungBinh;
public:
	void NhapThongTinSV();		//Khai báo phương thức
	void XuatThongTinSV();

	SinhVien(void);		//Phương thức khởi tạo mặc định (Default Constructor)
	~SinhVien(void);	//Phương thức phá hủy (Destructor)
};

Điều em muốn là: chuyển 2 hàm này sang file SinhVien.cpp
void NhapSV(SinhVien *SV, int n)
void XuatSV(SinhVien *SV, int n)

Và làm thế nào để bên main có thể truy xuất đến nó.
@Honey_moon @ltd

Phạm Hoàng Tuấn viết 18:31 ngày 30/09/2018

File .h dùng khai báo thư viện, class, ngoài ra còn dùng để làm gì nữa không ?

Nó còn dùng để khai báo các hàm nữa e, e phân biệt “khai báo hàm” va “định nghĩa hàm” nhé.
Khai báo thì mình chỉ cần truyền tên hàm, kiểu dữ liệu trả về, kiểu dữ của cá tham số (cái này nằm trong file .h)

Định ngĩa là mình viết nội dung của các hàm đó ra…

Điều em muốn là: chuyển 2 hàm này sang file SinhVien.cppvoid NhapSV(SinhVien *SV, int n)void XuatSV(SinhVien *SV, int n)

E khai báo bên file .h là đúng rồi, chuyển qua làm gì e, bên file .cpp a thấy e định nghĩa rồi mà.

Và làm thế nào để bên main có thể truy xuất đến nó.

e thử #include SinhVien.h vào xem

TTmagic viết 18:18 ngày 30/09/2018

Tạo 1 sinh viên, nhập xuất thì em đã biết, nhưng tạo 1 mảng sinh viên, thì mình phải khai báo 1 mảng sinh viên và khai báo số lượng sinh viên thì mình phải viết ở file nào. Rồi bên file main.cpp phải làm thế nào để xuất ra.

bạn có hàm nhập 1 sv với xuất 1 sv rồi, muốn làm mảng sv thì tạo mảng ở main rồi dùng for (cũng ở main) để nhập với xuất mảng

Thực tế khắc nghiệt viết 18:18 ngày 30/09/2018

mấy ngày nay bận bù đầu còn tâpk đánh 10 ngón khổ

X viết 18:28 ngày 30/09/2018

A post was merged into an existing topic: Topic này chứa các post được cho là Off-topic

Bài liên quan
0