[c++] hỏi ngu: static int trong class - vozForums
vozForums
Go Back   vozForums > Học tập và công việc > Ngành CNTT > Phát triển Phần mềm
Reply
 
Thread Tools
  #1  
Old 23-05-2018, 08:04
giwim 5's Avatar
giwim 5 giwim 5 is offline
Đã tốn tiền
 
Join Date: 01-2014
Posts: 542

[c++] hỏi ngu: static int trong class


E vừa làm xong bài này trường giao, chỉ làm theo từng bước rồi sửa 1 tí thôi, nhưng mà cái đoạn static e ko hiểu lắm. Tại sao cái lúc mình làm cout cái getTotal() xài variable int ko được mà phải có static ạ ??? bh mà e muốn sửa lại thành var int (ko theo yêu cầu của bài) thì phải sửa code ntn ???

Code:
#ifndef DIVSALES_H
#define DIVSALES_H
class DivSales
{
private:
	static int entireYear;
	int quaterSales[4] = { 0, 0, 0, 0 };
public:
	void setQuater(int, int, int, int);
	int getQuater(int);
	int getTotal();
};
#endif
Code:
#include "DivSales.h"
void DivSales::setQuater(int q1, int q2, int q3, int q4)
{
	quaterSales[0] = q1;
	quaterSales[1] = q2;
	quaterSales[2] = q3;
	quaterSales[3] = q4;
	entireYear += q1 + q2 + q3 + q4;
}
int DivSales::getQuater(int subscript)
{
	return quaterSales[subscript];
}
int DivSales::getTotal()
{
	return entireYear;
}
Code:
#include <iostream>
#include <iomanip>
#include "DivSales.h"
using namespace std;
const int QUATER_SIZE = 4;
const int DIVISION_SIZE = 6;
int quarterSales(int quartArr[]);
int DivSales::entireYear = 0;
int main()
{
	DivSales DivisionSale[DIVISION_SIZE];
	for (int division = 0; division < 6; division++)
	{
		int Array[QUATER_SIZE] = { 0, 0, 0, 0 };
		cout << "\nEnter Sales of Division: " << division + 1 << endl;
		quarterSales(Array);
		DivisionSale[division].setQuater(Array[0], Array[1], Array[2], Array[3]);
	}

	cout << "\n\t\t" << "Q1" << "\t" << "Q2" << "\t" << "Q3" << "\t" << "Q4" << endl;

	for (int count = 0; count < DIVISION_SIZE; count++)
	{
		for (int count2 = 0; count2 < QUATER_SIZE; count2++)
		{
			cout << "\t$" << DivisionSale[count].getQuater(count2);
		}
		cout << endl;
	}
	cout << "\nTotal corporate sales for the year: $" << DivisionSale[0].getTotal() << endl;
	return 0;
}
int quarterSales(int Array[])
{
	int amount;
	for (int count = 0; count < QUATER_SIZE; count++)
	{
		cout << "Enter Q" << count + 1 << " Sales: ";
		cin >> amount;
		Array[count] = amount;
	}
	return amount;
}
Reply With Quote
  #2  
Old 23-05-2018, 11:32
allein_zu_hause allein_zu_hause is offline
Senior Member
 
Join Date: 09-2013
Posts: 383

Không được theo nghĩa là kết quả sai đúng ko?

nếu là int không thôi thì mỗi instance của class sẽ có một thằng biến entireYear riêng. Do đó kết quả in ra sẽ khác so với bạn nghĩ.

Khi thêm static thì biến đó nó như kiểu là global nhưng giới hạn chỉ các instance của class mới access nó được. Lúc này các biến entireYear của các instance đều trùng nhau và là một. Khi đó kết quả sẽ đúng so với bạn nghĩ.

Sent from Sony ghẻ using vozFApp
Reply With Quote
  #3  
Old 23-05-2018, 12:28
giwim 5's Avatar
giwim 5 giwim 5 is offline
Đã tốn tiền
 
Join Date: 01-2014
Posts: 542

Quote:
Originally Posted by allein_zu_hause View Post
Không được theo nghĩa là kết quả sai đúng ko?

nếu là int không thôi thì mỗi instance của class sẽ có một thằng biến entireYear riêng. Do đó kết quả in ra sẽ khác so với bạn nghĩ.

Khi thêm static thì biến đó nó như kiểu là global nhưng giới hạn chỉ các instance của class mới access nó được. Lúc này các biến entireYear của các instance đều trùng nhau và là một. Khi đó kết quả sẽ đúng so với bạn nghĩ.

Sent from Sony ghẻ using vozFApp
đội ơn bác, nguyện theo đạo vozer suốt đời
Reply With Quote
Reply

Thread Tools

Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is On
Smilies are On
[IMG] code is On
HTML code is Off

Forum Jump

All times are GMT +7. The time now is 19:13.
Chịu trách nhiệm nội dung: Bạch Thành Trung © 2019 Công ty TNHH Thật Vi Diệu
ĐC tầng 4, số 6-8 Đường D2, Bình Thạnh, Hồ Chí Minh, Việt Nam - SĐT 0981323799 - MST 0313906593
Giấy phép thiết lập MXH số 334/GP-BTTTT, Ký ngày: 19/08/2019