khi truy cập foo() của "cơ sở" bằng đối tượng của lớp dẫn xuất.truy cập phương thức của lớp cơ sở với đối tượng của lớp dẫn xuất có phương thức cùng tên
#include <iostream>
class base
{
public:
void foo()
{
std::cout<<"\nHello from foo\n";
}
};
class derived : public base
{
public:
void foo(int k)
{
std::cout<<"\nHello from foo with value = "<<k<<"\n";
}
};
int main()
{
derived d;
d.foo();//error:no matching for derived::foo()
d.foo(10);
}
cách truy cập phương thức lớp cơ sở có cùng tên trong lớp dẫn xuất. lỗi được tạo đã được hiển thị. tôi xin lỗi nếu tôi không rõ ràng nhưng tôi cảm thấy tôi đã làm cho bản thân mình rõ ràng như nước. cảm ơn trước.
nhưng tại sao lớp cơ sở foo() không thể truy cập trong lớp dẫn xuất trong khi tôi đã thừa kế lớp cơ sở đó ... –
@ashish: Có thể truy cập (có nghĩa là các thông số truy cập của công khai/được bảo vệ/riêng tư), nhưng nó là * ẩn *. Đọc câu hỏi mà Josh đã liên kết: http://stackoverflow.com/questions/1628768/why-does-an-overridden-function-in-the-derived-class-hide-other-overloads-of-the –
oh whew, I sắp tạo ra các trình bao bọc để ủy nhiệm cho các quá tải cơ sở bị ẩn chỉ để lộ chúng từ đối tượng dẫn xuất, kiểu như 'void foo() {base :: foo()}', và sau đó đã tìm ra cách tốt hơn để làm điều này, và may mắn thay, có. Ngoài ra còn có các tùy chọn để làm 'd.base :: foo()', nhưng từ một quan điểm phía khách hàng mà dường như loại gây phiền nhiễu. – solstice333