2009-06-11 68 views

Trả lời

221

Vâng, struct hoàn toàn giống với class trừ khả năng tiếp cận mặc định là public cho struct (trong khi nó private cho class).

+3

Đây phải là câu trả lời được chấp nhận. – QuantumKarl

19

Tất nhiên. Trong C++, cấu trúc và lớp học gần như giống hệt nhau (những thứ như mặc định cho công chúng thay vì riêng tư nằm trong số những khác biệt nhỏ).

99

Có. Kế thừa là công khai theo mặc định.

Cú pháp (ví dụ):

struct A { }; 
struct B : A { }; 
struct C : B { }; 
36

khác so với những gì Alex và Evan đã nói, tôi muốn nói thêm rằng một struct C++ không giống như một struct C.

Trong C++, cấu trúc có thể có các phương thức, kế thừa, vv giống như một lớp C++.

+1

cấu trúc C++ có thể giống như cấu trúc C. Khi nó được, nó được gọi là một POD - Plain Old Datatype. Nó là một sự khác biệt quan trọng, vì ví dụ, chỉ các cấu trúc POD mới có thể là một phần của các công đoàn. – camh

+6

Nhưng POD có thể có phương pháp, do đó, không phải là "giống như" cấu trúc C theo nghĩa mà cgorshing đang nói đến. –

3

Trong C++, thừa kế một cấu trúc giống như một lớp ngoại trừ những khác biệt sau:

Khi phát sinh một cấu trúc từ một lớp/struct, mặc định truy cập-specifier cho một lớp cơ sở/struct là công khai. Và khi phát sinh một lớp, thông số truy cập mặc định là riêng tư.

Ví dụ, chương trình 1 không thành công với lỗi biên dịch và chương trình 2 hoạt động tốt.

// Program 1 
#include <stdio.h> 

class Base { 
    public: 
     int x; 
}; 

class Derived : Base { }; // Is equivalent to class Derived : private Base {} 

int main() 
{ 
    Derived d; 
    d.x = 20; // Compiler error because inheritance is private 
    getchar(); 
    return 0; 
} 

// Program 2 
#include <stdio.h> 

struct Base { 
    public: 
     int x; 
}; 

struct Derived : Base { }; // Is equivalent to struct Derived : public Base {} 

int main() 
{ 
    Derived d; 
    d.x = 20; // Works fine because inheritance is public 
    getchar(); 
    return 0; 
}