在本节中,我们将讨论有关C ++中派生类方法的限制性访问的有趣事实。我们将看到一些示例并分析输出,以了解有关在C ++中使用派生类方法的限制的更多信息。
让我们看下面的实现以更好地理解-
#include <iostream> using namespace std; class BaseClass { public: virtual void display(){ cout << "Print function from the base class" << endl; } }; class DerivedClass: public BaseClass { private: void display() { cout << "Print function from the derived class" << endl; } }; int main() { }
很好,现在如果我们用这个替换主功能块,我们将得到如下错误:
int main() { DerivedClass d; d.display(); }
输出结果
main.cpp: In function ‘int main()’: main.cpp:20:15: error: ‘virtual void DerivedClass::display()’ is private within this context d.display(); ^ main.cpp:13:10: note: declared private here void display() { ^~~~~~~
由于派生类中的方法是私有的,因此显示错误。现在让我们看一下该实现,其中使用基本指针调用该函数。这可以调用该函数。
#include <iostream> using namespace std; class BaseClass { public: virtual void display(){ cout << "Print function from the base class" << endl; } }; class DerivedClass: public BaseClass { private: void display() { cout << "Print function from the derived class" << endl; } }; int main() { BaseClass *b = new DerivedClass; b->display(); }
输出结果
Print function from the derived class
从上面的程序中,我们可以看到私有函数DerivedClass::display()是通过基类指针被调用的,由于display()函数在基类中是公共的,所以该程序可以正常工作。访问说明在编译时进行验证,并且display()在基类中是公共的。在运行期间,仅调用与指向对象相对应的函数,并且不验证访问说明符。因此,派生类的私有函数通过基类的指针被调用。