Hỏi về cách tự động tạo id cho đối tượng trong OOP C++

Chào mọi người, mình muốn hỏi về cách tự động tạo id cho đối tượng trong OOP C++.
Mình có 1 class Motor, trong đó có biến _id và 1 biến static _count = 0;
Mỗi lần gọi constructor thì Motor sẽ _count++ và id = _to_string(_count),
Tuy nhiên, hạn chế là mình ko thể đọc dữ liệu từ file có sẵn, vì _id luôn được nhập tự động.

==>Có cách nào để vừa có thể nhận dữ liệu từ file có sẵn, vừa có thể tự động đánh số _id tiếp theo (sau khi đã đọc file ko). Mình cảm ơn

#include <iostream>
#include <vector>
#include <string>
#include <fstream>
using namespace std;

class Motor
{
private:
	string _id;
	string _name;
private:
	static int _count;
public:
	Motor(string name)
	{
		_count++;
		_id = to_string(_count);
		_name = name;
	}
	string toString()
	{
		string res = _id + "," + _name;
		return res;
	}

};

int Motor::_count = 0;

int main()
{
	Motor x1("Toyota");
	cout << x1.toString() << endl;
	Motor x2("Suzuki");
	cout << x2.toString() << endl;
	return 0;
}

Tức là khi lưu vào tập tin thì bạn lưu cả id.
Vấn đề gặp phải là khi đọc ngược lại thì id lại được tạo mới và tăng dần, có thể không khớp với id từ tập tin?

Vậy thì cách bạn giải quyết vấn đề này như thế nào?

  1. Không lưu id vào tập tin, chỉ lưu các thông tin khác. Khi đọc lại sẽ tự tạo id. Nhưng cách này không bảo toàn dữ liệu giữa các lần truy xuất.
  2. Vẫn lưu đầy đủ, khi đọc thì không tạo id tự tăng mà lấy id đã có.
  3. Vừa phối hợp giữa id tự tăng và lấy id sẵn có. Nhưng bắt đầu tăng từ đâu?
  4. Lưu thêm 1 giá trị thể hiện điểm bắt đầu cho id tự tăng và lấy đó làm mốc để tăng dần.

Bạn nên thay đổi lớp Motor một tí để có thể linh hoạt hơn trong việc gán cố định hoặc tự tăng.
Ví dụ:

class Mortor{
...
    public:
        Mortor(string name, int id = -1){ // tham số mặc định
            _name = name;
            if(id == -1){
                _count++;
                _id = to_string(_count);
            }else{
               _id = id;
            }
        }
...
}
3 Likes
83% thành viên diễn đàn không hỏi bài tập, còn bạn thì sao?