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 << " \n====== NHAP THONG TIN SINH VIEN ====== \n";
for (int i = 0; i < n; i++)
{
std::cout << "\nNhap thong tin sinh vien thu: " << i + 1 << std::endl;
SV[i].NhapThongTinSV();
}
}
void XuatSV(SinhVien *SV, int n)
{
std::cout << " \n====== THONG TIN SINH VIEN ====== \n";
for (int i = 0; i < n; i++)
{
std::cout << "\nThong tin sinh vien thu: " << i + 1 << std::endl;
SV[i].XuatThongTinSV();
}
}
int main()
{
int n;
std::cout << "\nNhap 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 << "\nNhap ho ten: ";
getline(std::cin, HoTen);
HoTen = ChuanHoaHoTen(HoTen);
do
{
std::cout << "\nNhap tuoi: ";
std::cin >> Tuoi;
if (Tuoi < 18 || Tuoi > 50)
{
std::cout << "\nNhap sai tuoi, nhap lai: ";
}
} while (Tuoi < 18 || Tuoi > 50);
do
{
std::cout << "\nNhap vao diem trung binh: ";
std::cin >> DiemTrungBinh;
if (DiemTrungBinh < 0 && DiemTrungBinh > 10)
{
std::cout << "\nNhap sai diem trung binh, nhap lai";
}
} while (DiemTrungBinh < 0 && DiemTrungBinh > 10);
}
void SinhVien::XuatThongTinSV()
{
std::cout << "\nHo va ten: " << HoTen;
std::cout << "\nTuoi: " << Tuoi;
std::cout << "\nDiem 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

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