Kế thừa cấu trúc trong C ++


Câu trả lời:


290

Có, structchính xác như classngoại trừ khả năng truy cập mặc định là publiccho struct(trong khi đó là privatecho class).


129

Đúng. Việc thừa kế được công khai theo mặc định.

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

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

46

Khác với những gì Alex và Evan đã nêu, tôi muốn nói thêm rằng cấu trúc C ++ không giống cấu trúc C.

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


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

9
Nhưng các POD có thể có các phương thức, do đó, không giống như các cấu trúc C theo nghĩa mà cgors Breath đang nói đến.
Steve Jessop

Nếu đó là POD, nó không có phương thức. Nếu không thì cái tên là vô nghĩa.
RL-S

24

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


23

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

Khi lấy một cấu trúc từ một lớp / struct, bộ xác định truy cập mặc định cho một lớp / struct cơ sở là công khai. Và khi lấy một lớp, trình xác định 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;
}
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.