在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

回到顶部