Tôi bối rối: Tôi nghĩ dữ liệu được bảo vệ đã được đọc/ghi bởi con của một lớp đã cho trong C++.Dữ liệu được bảo vệ trong lớp cha không có sẵn trong lớp con?
Đoạn dưới đây thất bại trong việc biên dịch trong MS Compiler
class A
{
protected:
int data;
};
class B : public A
{
public:
B(A &a)
{
data = a.data;
}
};
int main()
{
A a;
B b = a;
return 0;
}
Thông báo lỗi:
Microsoft (R) 32-bit C/C++ Optimizing Compiler Version 15.00.30729.01 for 80x86
Copyright (C) Microsoft Corporation. All rights reserved.
demoFail.cpp
demoFail.cpp(12) : error C2248: 'A::data' : cannot access protected member declared in class 'A'
demoFail.cpp(4) : see declaration of 'A::data'
demoFail.cpp(2) : see declaration of 'A'
Tôi đang làm gì sai?
Umph. Để được chính xác, trường hợp này là một trường hợp giả chỉ để chứng minh vấn đề. Tôi thực sự muốn thực hiện một số dữ liệu được đọc khá sâu. –
Trong mọi trường hợp, bạn chỉ có thể muck xung quanh với dữ liệu được bảo vệ trong phần A hoặc đối tượng B khác. Nếu bạn có một cá thể A hoặc một cá thể C cũng có nguồn gốc từ A, B không có quyền đặc biệt đối với những người đó. Nếu bạn không thể thực hiện lời khuyên này (hãy tạo một phần B này bằng cách sao chép nó thành phần cơ sở của B này, mà bạn có quyền truy cập), thì bạn có thể gặp vấn đề về thiết kế có thể yêu cầu bức tranh lớn hơn câu trả lời. – UncleBens
@rlbond: Mã hóa sau khi đi ngủ lần nữa. Điều này đã giải quyết được vấn đề của tôi. Cảm ơn. :) –