30/09/2018, 16:12

Cách sử dụng biến trong Class trong C++?

Em mới học class, xem bài giảng anh Đạt thì ít quá không hiểu được, cách sử dụng biến trong class
Như code ở dưới:

  1. Em muốn nhập, xuất giờ (private) thì phải nhập như thế nào, trong hàm main và cả ngoài hàm main?. Code ở dưới em truyền sẳn vì ko biết cách nhập ^^.

  2. Nếu các biến đều khai báo là “private” vậy mình phải get/set từng biến ?

  3. Em xin tài liệu về class C++ đơn giản dễ hiểu 1 tý, google em không hiểu gì luôn ^^. (Video anh Đạt dễ hiểu mà thiếu, video anh Sơn thì không có khúc bắt đầu, …)

#include <iostream>

class ThoiGian
{
public:
	void setGio(int x)
	{
		gio = x;
	}
	int getGio()
	{
		return gio;
	}

private:
	int gio;
};

int main(){
	ThoiGian x1;
	int gio;
	std::cout << "Nhap vao so gio: ";
	x1.setGio(5);
	std::cout << x1.getGio();
	system("pause");
	return 0;
}
Phạm Hoàng Tuấn viết 18:18 ngày 30/09/2018

Em muốn nhập, xuất giờ (private) thì phải nhập như thế nào, trong hàm main và cả ngoài hàm main?. Code ở dưới em truyền sẳn vì ko biết cách nhập ^^.

Muốn nhập giờ bạn thêm dòng std::cin>>gio;.

    #include <iostream>
    
    class ThoiGian
    {
    public:
    	void setGio(int x)
    	{
    		gio = x;
    	}
    	int getGio()
    	{
    		return gio;
    	}
    
    private:
    	int gio;
    };
    
    int main(){
    	ThoiGian x1;
    	int gio;
    	std::cout << "Nhap vao so gio: ";
       std::cin>>gio;
    	x1.setGio(gio);
    	std::cout << x1.getGio();
    	system("pause");
    	return 0;
    }

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

@tuancoi2506 … kiểu này ko nhập được anh ơi, nếu giống anh thì mình phải khai báo thêm biến giờ trong main, giờ này nó là private sao anh nhập kiểu thế được, nó làm gì hiểu giờ nằm ở đâu.

#include <iostream>

class ThoiGian
{
public:
	void nhapTime()
	{
		do 
		{
			std::cout << "\nNhap gio: ";
			std::cin >> gio;
			if (gio < 0 || gio > 24)
			{
				std::cout << "\nNhap sai. Nhap lai!!!";
			}
		} while (gio < 0 || gio > 24);

		do 
		{
			std::cout << "\nNhap phut: ";
			std::cin >> phut;
			if (phut < 0 || phut > 60)
			{
				std::cout << "\nNhap sai. Nhap lai!!!";
			}
		} while (phut < 0 || phut > 60);
		do 
		{
			std::cout << "\nNhap giay: ";
			std::cin >> giay;
			if (giay < 0 || giay > 60)
			{
				std::cout << "\nNhap sai. Nhap lai!!!";
			}
		} while (giay < 0 || giay > 60);
	}

	void xuatTime()
	{
		std::cout << "Thoi gian vua nhap: " << gio << " gio " << phut
										<< " phut " << giay << " giay";
	}

private:
	int gio, phut, giay;
};

int main(){
	ThoiGian x1, x2;
	x1.nhapTime();
	x1.xuatTime();
	x2.nhapTime();
	x2.xuatTime();

	system("pause");
	return 0;
}

Cái này là em nhập xuất trong class, nhưng mà vẫn không biết cách lấy giá trị ra. Em muốn nhập xuất ngoài class và cách lấy giá trị luôn đó ạ.

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

Nếu các biến đều khai báo là “private” vậy mình phải get/set từng biến ?

Đúng rồi bạn. Biến private thì chỉ dùng dc trong phạm vi class đó thôi. Mình khai báo private sau đó dùng các hàm get, set để bảo vệ dữ liệu, người dùng muốn truy xuất đến các biến private của bạn thì fai qua get,set, nên bạn có thể quản lý việc truy xuất đó. Ví dụ, bạn không cho phép ng dùng gán biến gio là 1 số âm. thì bạn làm như sau:


    void setGio(int x)
    {
          if(x>0)
         {
    		gio = x;
         }
         else
        {
               std::cout<<"Gio khong the mang gia tri am"
        }
   }
Quick viết 18:13 ngày 30/09/2018

Nhưng mà cái này nhập và truy xuất như thế nào đó ạ, em ko biết cái này, em chỉ biết get/set dùng để đóng gói. Theo bài giảng của anh Đạt get/set là gán trực tiếp vào rồi.

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

kiểu này ko nhập được anh ơi, nếu giống anh thì mình phải khai báo thêm biến giờ trong main

Phải khai báo biến trong hàm main thì đúng ùi,biến gio trong ham main khác biến gio trong class của e nhé. Nó chỉ trùng tên thôi. Em có thể để tên biến trong ahmf main là abc cũng được vậy.

Cái này là em nhập xuất trong class, nhưng mà vẫn không biết cách lấy giá trị ra. Em muốn nhập xuất ngoài class và cách lấy giá trị luôn đó ạ.

Nhập ngoài class thì e làm dc rồi đó thôi, muốn lấy giá trị thì e viết các hàm như getgio() đấy, giờ viết thêm getphut(), getgiay() là được mà. Rồi gọi: int sophut=GetPhut()

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

Phải khai báo biến trong hàm main thì đúng ùi,biến gio trong ham main khác biến gio trong class của e nhé. Nó chỉ trùng tên thôi. Em có thể để tên biến trong ahmf main là abc cũng được vậy.

Nhập ngoài class thì e làm dc rồi đó thôi, muốn lấy giá trị thì e viết các hàm như getgio() đấy, giờ viết thêm getphut(), getgiay() là được mà. Rồi gọi: int sophut=GetPhut()

Thêm biến trong main rồi nhập em thấy nó sao sao ấy …
Thế còn nhập ngoài class và cả ngoài main thì thế nào đây anh ^^

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

Thêm biến trong main rồi nhập em thấy nó sao sao ấy …

Sao là sao e? vì private nên fai làm vậy thôi.

Thế còn nhập ngoài class và cả ngoài main thì thế nào đây anh ^^

E có thể tạo 1 hàm nhập với giá trị trả về là 1 đối tượng ThoiGian, trong hàm main() hoặc ngoài hàm main e tạo 1 thể hiện của đối tượng ThoiGian, rồi gán nó cho giá trị hàm nhập đó.

Tuấn Nguyễn viết 18:22 ngày 30/09/2018

Chồng toán tử nhập

#include <iostream>
#include <conio.h>
using namespace std;
class ThoiGian
{
public:
	void setGio(int x)
	{
		gio = x;
	}
	int getGio()
	{
		return gio;
	}
   friend istream& operator>>(istream &Input,ThoiGian &x);

private:
	int gio;
};
istream& operator>>(istream &Input,ThoiGian &x)
{
 do
 {
  cout<<"Nhap Vao So Gio:\n";
  Input>>x.gio;
  if(x.gio < 0 )
  cout<<"Nhap Gio Khong Hop Le. Nhap Lai!\n";
  }while(x.gio < 0);
  return Input;
}
int main(){
	ThoiGian x1;
	int gio;
  cin>>x1;
	cout << x1.getGio();
	getch();
	return 0;
}
N.T.H viết 18:17 ngày 30/09/2018
  1. Khi một class có các data fields là private, bạn buộc phải thay đổi chúng qua một công cụ public nào đó, ở đây là các functions set() và get() được khai báo tại vùng public, điều này giúp ta kiểm soát việc thay đổi và sử dụng các private data members của class, không cho phép một chương trình khác không thuộc class có quyền thay đổi và sử dụng các dữ liệu này.
    Trong bài của bạn, nếu bạn muốn nhập giá trị bất kỳ truyền vào hàm set của class, bạn có thể khai báo thêm 1 biến n nào đó, nhập giá trị n bất kỳ từ bàn phím, và sau đó x1.setGio(n); vậy là xong rồi.

  2. Đúng, phải get/set từng biến, sắp tới bạn sẽ học về Constructor (hàm dựng) cho phép bạn gán giá trị ban đầu cho một object được khai báo ra.

  3. Bạn nên tìm sách để đọc, sách tiếng Anh càng tốt.

Bài liên quan
0