Công cụ bảo vệ mã nguồn .NET mạnh nhất, không thể unpack, miễn phí cho các khách hàng đầu tiên đăng ký.
Từ 1 tới 3 trên tổng số 3 kết quả

Đề tài: Thắc mắc về lập trình hướng đối tượng C++

  1. #1
    Ngày gia nhập
    04 2020
    Bài viết
    15

    Mặc định Thắc mắc về lập trình hướng đối tượng C++

    Khai báo và cài đặt lớp sinh viên để chạy đúng với hàm main sau:

    Code:
    void main()
    {
            //MSSV: "xxxxxxx", HoTen: "xxxx", NgaySinh: xx/xx/xxxx, DLT: 10, DTH: 10
    	SinhVien sv1;
    	sv1.Xuat();
    	SinhVien sv2("1363001");
    	sv2.Xuat();
    	SinhVien sv3("1363002", "Nguyen Van A", 7, 8.5);
    	sv3.Xuat();
    	SinhVien sv4("1363003", "Tran Thi B", 8, 9.5, 12, 3, 1996);
    	sv4.Xuat();
    	NgayThang n(30, 2, 1996);
    	SinhVien sv5("1363004", "Ngo Van C", 5, 6, n);
    	sv5.Xuat();
    	SinhVien sv6(sv5);
    	sv6.Xuat();
    }
    vì mình mới học lập trình hướng đối tượng, nên mình thắc mắc có phải chỗ NgayThang là mình phải tạo class mới không, và tạo như thế nào?

    code mình đang làm dang dở:

    Code:
    #include<iostream>
    #include<string>
    using namespace std;
    
    class SinhVien {
    private:
    	int ngay, thang, nam;
    	double dlt, dth;
    	string ten, mssv;
    public:
    	SinhVien();
    	SinhVien(string maso);
    	SinhVien(string maso, string name, double diemlt, double diemth);
    	SinhVien(string maso, string name, int date, int month, int year);
    	SinhVien(string maso, string name, double diemlt, double diemth, int date, int month, int year);
    	void Xuat();
    	~SinhVien();
    };
    SinhVien::SinhVien()
    {
    	mssv = "xxxxxxx";
    	ten = "xxxx";
    	ngay = 1;
    	thang = 1;
    	nam = 1;
    	dlt = 10;
    	dth = 10;
    }
    SinhVien::SinhVien(string maso)
    {
    	mssv = maso;
    	ten = "khong co ten";
    	ngay = 0;
    	thang = 0;
    	nam = 0;
    	dlt = 0;
    	dth = 0;
    }
    SinhVien::SinhVien(string maso, string name, double diemlt, double diemth)
    {
    	mssv = maso;
    	ten = name;
    	dlt = diemlt;
    	dth = diemth;
    	ngay = 0;
    	thang = 0;
    	nam = 0;
    }
    SinhVien::SinhVien(string maso, string name, double diemlt, double diemth, int date, int month, int year)
    {
    	mssv = maso;
    	ten = name;
    	ngay = date;
    	thang = month;
    	nam = year;
    	dlt = diemlt;
    	dth = diemth;
    }
    void SinhVien::Xuat()
    {
    	cout << "MSSV: " << mssv << ", " << "HoTen: " << ten << ", " << "NgaySinh: " << ngay << "/" << thang << "/" << nam << "," << " DLT: " << dlt << ", " << "DTH: " << dth << endl;
    }
    SinhVien::~SinhVien()
    {
    
    }
    
    
    int main()
    {
    	SinhVien sv1;
    	sv1.Xuat();
    	SinhVien sv2("1363001");
    	sv2.Xuat();
    	SinhVien sv3("1363002", "Nguyen Van A", 7, 8.5);
    	sv3.Xuat();
    	SinhVien sv4("1363003", "Tran Thi B", 8, 9.5, 12, 3, 1996);
    	sv4.Xuat();
    	NgayThang n(30, 2, 1996);
    	SinhVien sv5("1363004", "Ngo Van C", 5, 6, n);
    	sv5.Xuat();
    	//SinhVien sv6(sv5);
    	//sv6.Xuat();
    }
    Công cụ bảo vệ mã nguồn .NET mạnh nhất hiện tại, miễn phí cho các khách hàng đầu tiên đăng ký.
    Đã được chỉnh sửa lần cuối bởi baolong2605 : 25-05-2020 lúc 03:17 PM.

  2. #2
    Ngày gia nhập
    02 2014
    Nơi ở
    TP.HCM
    Bài viết
    927

    NgayThang n(30, 2, 1996);
    nên mình thắc mắc có phải chỗ NgayThang là mình phải tạo class mới không, và tạo như thế nào?

    Chỗ đó là tạo một thể hiện của lớp hay một cấu trúc, theo mã khác của bạn đang thực hiện thì chắc đang học về lớp nên bạn có thể tạo lớp.
    Cách tạo thì cũng đơn giản như mã tạo lớp khác của bạn thôi, trên main() thì chưa thấy mục đích của nó nên có thể như :

    C++ Code:
    1. class NgayThang
    2. {
    3. //protected:    // Có kế thừa
    4. private:    // Không kế thừa
    5.     int     Ngay;
    6.     int     Thang;
    7.     int     Nam;
    8.     // .....
    9. public:
    10.     NgayThang(int ngay, int thang, int nam) : Ngay(ngay), Thang(thang), Nam(nam)
    11.     {
    12.         //...........
    13.     }
    14.     //..........
    15. };

  3. #3
    Ngày gia nhập
    02 2016
    Bài viết
    309

    Trích dẫn Nguyên bản được gửi bởi MHoang Xem bài viết
    NgayThang n(30, 2, 1996);
    nên mình thắc mắc có phải chỗ NgayThang là mình phải tạo class mới không, và tạo như thế nào?

    Chỗ đó là tạo một thể hiện của lớp hay một cấu trúc, theo mã khác của bạn đang thực hiện thì chắc đang học về lớp nên bạn có thể tạo lớp.
    Cách tạo thì cũng đơn giản như mã tạo lớp khác của bạn thôi, trên main() thì chưa thấy mục đích của nó nên có thể như :

    C++ Code:
    1. class NgayThang
    2. {
    3. //protected:    // Có kế thừa
    4. private:    // Không kế thừa
    5.     int     Ngay;
    6.     int     Thang;
    7.     int     Nam;
    8.     // .....
    9. public:
    10.     NgayThang(int ngay, int thang, int nam) : Ngay(ngay), Thang(thang), Nam(nam)
    11.     {
    12.         //...........
    13.     }
    14.     //..........
    15. };
    Nếu đã có một lớp NgayThang thì theo nguyên tắc HĐT, chi tiết ngay,thang,nam trong lớp SinhVien nên được thay bằng một đối tượng thuộc lớp này.
    Và đồng thời, class NgayThang cũng nên có một hàm dựng loại copy.
    Nếu có hàm copy thì trong hàm main, hai câu sau có thể có thể sửa được
    NgayThang n(30, 2, 1996);
    SinhVien sv5("1363004", "Ngo Van C", 5, 6, n);
    Thành
    SinhVien sv5("1363004", "Ngo Van C", 5, 6, NgayThang(30, 2, 1996));
    Công cụ bảo vệ mã nguồn .NET mạnh nhất hiện tại, miễn phí cho các khách hàng đầu tiên đăng ký.

Quyền hạn của bạn

  • Bạn không thể gửi đề tài mới
  • Bạn không thể gửi bài trả lời
  • Bạn không thể gửi các đính kèm
  • Bạn không thể chỉnh sửa bài viết của bạn