C++ 访问说明符和虚拟函数

C++ 访问说明符和虚拟函数,c++,virtual,C++,Virtual,在C++指定的3个不同访问说明符(公共、私有、受保护)下声明虚拟函数时,可访问性的规则是什么 每一个的意义是什么?任何解释这一概念的简单代码示例都非常有用。在基类中使用虚拟函数时,它们与常规函数一样(纯虚拟函数除外) 用我的头脑来总结: 任何人都可以访问公共功能。 只有类及其朋友才能访问私有函数 受保护的函数与私有函数类似,只有它们可以被派生类访问 Public是接口,private/protected函数是内部函数。 还要注意的是,所有局部变量(根据封装)都应该是受保护/私有的 现在,当涉及到

在C++指定的3个不同访问说明符(公共、私有、受保护)下声明虚拟函数时,可访问性的规则是什么
每一个的意义是什么?任何解释这一概念的简单代码示例都非常有用。

在基类中使用虚拟函数时,它们与常规函数一样(纯虚拟函数除外)

用我的头脑来总结:

任何人都可以访问公共功能。 只有类及其朋友才能访问私有函数 受保护的函数与私有函数类似,只有它们可以被派生类访问

Public是接口,private/protected函数是内部函数。 还要注意的是,所有局部变量(根据封装)都应该是受保护/私有的

现在,当涉及到派生类时,您可以派生这样的类:

class A : [public | protected | private] B
{
};
现在,B前面的public/private/protected限定符表示从基类继承的限制最小的安全级别。这不是方法和局部变量的“过滤器”,因为有些方法和局部变量不是继承的,它只是将它们的安全级别更改为指定的安全级别,如果它们限制较少(更公开)

因此
class A:public B
将保留继承的基本成员,而,
class A:private B
会将它们全部更改为private成员


希望这对你有意义,并回答你的问题。如果没有,告诉我

访问说明符的应用方式与名称查找期间对任何其他名称的应用方式相同。函数是虚拟的这一事实根本不重要

关于虚函数,有时会发生一个常见的错误

如果名称查找确定可行函数为虚拟函数,则将在用于命名函数的对象表达式的静态类型的范围内检查虚拟函数的访问说明符。在运行时,可以使用完全不同的访问说明符在派生类中定义要调用的实际函数。这是因为“访问说明符”是编译时现象

// Brain compiled code ahead
struct A{
   virtual void f() {}
private:
   virtual void g() {}
protected:
   virtual void h() {}
};

struct B : A{
private:
   virtual void f() {}           // Allowed, but not a good habit I guess!
};

B b;
A &ra = b;

ra.f();    // name lookup of 'f' is done in 'A' and found to be public. Compilation 
           // succeeds and the call is dynamically bound
           // At run time the actual function to be called is 'B::f' which could be private, protected etc but that does not matter
“大脑提前编译代码”哈哈,这是@sbi的模式。也许我也应该先介绍一下我的代码。我的代码经常是脑死亡