在C++指定的3个不同的访问说明符(public,private,protected)下声明虚函数时,可访问性的规则是什么 每个函数的意义是什么?任何简单的代码示例来解释这个概念将非常有用。访问说明符和虚函数
回答
访问说明符的应用方式与在名称查找过程中对其他任何名称的应用方式相同。功能是虚拟的这一事实根本不重要。
在虚拟功能方面有时会发生常见错误。
如果名称查找将可行函数确定为虚函数,则在用于命名该函数的对象表达式的静态类型的范围内检查虚函数的访问说明符。在运行时,要调用的实际函数可以使用完全不同的访问说明符在派生类中定义。这是因为'访问说明符'是编译时间表单子。
// 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
谢谢!很好的解释。 – 2010-09-24 10:48:36
“大脑编译代码”大声笑,这是@ sbi的模式。也许我应该从我的代码开始介绍这种介绍。经常发生我的代码脑死亡 – 2010-09-25 12:31:29
@Johannes Schaub - litb::), – Chubsdad 2010-09-25 12:59:37
在基类中使用虚函数就像普通函数(纯虚函数除外)一样。
从我的头顶总结:
公共职能的任何人都可以访问。 私有函数只能访问类和其朋友 受保护的函数就像私有函数一样,只有它们可以被派生类访问。
public是接口,而private/protected函数是内部的。 还要注意,所有的局部变量(根据封装)应该被保护/私有。
现在,当它涉及到派生类,你派生类是这样的:
class A : [public | protected | private] B
{
};
现在,公共/私营/保护盈B的资格规定限制最少的安全级别从基继承类。对于方法和局部变量来说,这不是一个“过滤器”,因为有些不是继承的,只是将它们的安全级别更改为指定的安全级别,如果它们的限制较少(更公开)。
因此class A : public B
将离开继承的基本成员, class A : private B
会将它们全部更改为私有成员。
希望这对你有意义并回答你的问题。如果没有,告诉我!
- 1. 访问说明符
- 2. Java - 访问说明符
- 3. Apex访问说明符和测试类
- 4. 访问说明符和访问修饰符有什么区别?
- 5. 访问说明
- 6. 接口声明的访问说明符
- 7. Java:变量访问说明符
- 8. =默认忽略访问说明符?
- 9. C#内部访问说明符,
- 10. 函数说明
- 11. 访问修饰符和访问说明符之间有什么区别
- 12. jQuery函数声明说明
- 13. array.splice()函数说明
- 14. Python函数说明
- 15. 生成Java高阶函数与访问说明
- 16. 函数说明返回字符串?
- 17. 类成员访问说明符和二进制代码
- 18. 类有虚函数和可访问的非虚拟析构函数
- 19. 说明参数argparse.ArgumentParser()函数
- 20. C++前向声明和纯虚函数
- 21. Verilog等待函数说明
- 22. 函数指针的说明
- 23. C++线程函数说明
- 24. 问虚函数
- 25. C++:类和函数的名称空间说明符
- 26. 如何用字符串中的数据替换访问说明符?
- 27. 引入受保护访问说明符的原理
- 28. C++的默认继承访问说明符?
- 29. 使用相同的C++访问说明符多次
- 30. 为什么有多个公共访问说明符standard_layout的类?
访问关于她的关于关于 – 2010-09-24 13:34:02