在C ++中对派生类方法进行更严格的访问时会发生什么
在本节中,我们将讨论有关C ++中派生类方法的限制性访问的有趣事实。我们将看到一些示例并分析输出,以了解有关在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() {
^~~~~~~
由于派生类中的方法是私有的,因此显示错误。现在让我们看一下该实现,其中使用基本指针调用该函数。这可以调用该函数。
范例(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() {
BaseClass *b = new DerivedClass;
b->display();
}
输出结果
Print function from the derived class
从上面的程序中,我们可以看到私有函数DerivedClass::display()是通过基类指针被调用的,由于display()函数在基类中是公共的,所以该程序可以正常工作。访问说明在编译时进行验证,并且display()在基类中是公共的。在运行期间,仅调用与指向对象相对应的函数,并且不验证访问说明符。因此,派生类的私有函数通过基类的指针被调用。
以上是 在C ++中对派生类方法进行更严格的访问时会发生什么 的全部内容, 来源链接: utcz.com/z/331543.html