编译期与运行期

本文通过一个C++代码示例解释了编译期和运行期的区别,探讨了编译器如何处理访问权限以及在多态中如何调用私有方法。同时,讨论了在大型系统中管理log信息时,如何利用编译期判断提高运行效率,对比了编译期和运行期控制log输出的两种方法:全局变量和宏定义。
摘要由CSDN通过智能技术生成

看这样一段代码。

 

出现了很有趣的结果,在main函数中,访问到了B类中的私有方法。为什么会出现这样的结果呢?

一般来说外部对象访问类的私有成员,除非是友元,否则在编译的时候就会报错,但是上面那段代码却可以正常的编译通过。

       C++因为支持面向对象编程,制订了一系列实现策略的语言机制。其中,各种各样的“限制”主要是出现在编译时:因此如果直接B  d; d.f();   就会导致编译错误:编译器发现   B::f()是B类的私有成员函数,因此拒绝这样的访问。

       这里我们可以区分类和对象:类是编译期的概念,也是“访问权限”、“成员数据”、“成员函数”这几个概念的“作用域”。而对象的作用域是运行期。它包括类的实例、引用和指针。   
  A   *pA   =   new   B();  
  这里   pA   是一个   A* , 所以就作为一个A类的指针参与了编译;因此从pA调用f()在编译器眼中,就是调用了A类的公开成员函数f()因此通过编译;然后在运行时,由于多态作用pA调用的f()是派生类的f()成员函数。虽然这时f()是

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值