Không hoàn toàn.
Một lớp là "giống như một kiểu dữ liệu" theo nghĩa là nó là một mẫu để tạo một đối tượng, nhưng nó không phải là một đối tượng mà bạn có thể sử dụng.
Khi bạn sử dụng mẫu đó để tạo một thể hiện của đối tượng, bạn có thể sử dụng đối tượng đó. Bạn có thể tạo bao nhiêu trường hợp tùy thích - bạn có thể nghĩ về những trường hợp đó dưới dạng biến.
Ví dụ:
class Person
{
public:
Person() : name("Joe Bloggs") {}
std::string getName() { return name; }
void setName(std::string n) { name = n; }
private:
std::string name;
};
Đây là một định nghĩa lớp cho một người. Nó không phải là một biến. Bạn không thể gọi setName trên nó vì nó không tồn tại. Nhưng khi bạn làm:
int main()
{
Person p, q;
p.setName("Jill Bloggs");
q.setName("Bob King");
std::cout << p.getName() << " " << q.getName() << std::endl;
}
Bạn đã tạo hai trường hợp người mà bạn có thể gán, thay đổi và sử dụng - chúng là các biến được gọi là trường hợp.
Tôi không biết ý nghĩa của "biểu mẫu dữ liệu", bỏ qua điều đó.
Như để khai báo - tuyên bố nói rằng một thể hiện của một cái gì đó sẽ có mặt. Ví dụ: nếu bạn đang tạo lớp học và tệp tiêu đề của bạn có:
class foo
{
public:
foo(int value);
void bar();
private:
int x;
};
Bạn tuyên bố rằng bạn có một hàm gọi là thanh trả về void và bạn có số nguyên gọi là x.
Không có bộ nhớ nào được cấp cho biến, x và không có định nghĩa nào được cung cấp hoặc thanh, vì vậy chúng chỉ là khai báo. tệp nguồn của bạn có lẽ sẽ cung cấp định nghĩa cho thanh như:
void foo::bar()
{
//some code
}
và definiton constructor cho foo sẽ khởi tạo x với giá trị và kiểm soát cách nó được tạo ra (với một danh sách initializer):
foo::foo(int value) : x(value)
{
//some code
}
Tại sao rất nhiều downvotes? – TeaOverflow
Tôi không biết; Tôi nghĩ rằng các câu hỏi sẽ đơn giản để trả lời và tôi đã dành thời gian để viết ra các câu hỏi để họ có thể được trả lại hiệu quả. – Ayfiaru
Tôi nghĩ nó hơi khắc nghiệt. Nếu anh ấy đã đọc một cuốn sách và anh ấy nhầm lẫn thì đó là những câu hỏi hợp lệ. –