zoukankan      html  css  js  c++  java
  • 非static成员函数通过类名::来调用,空指针调用成员方法不出错!

    首先来看这一段代码:

    #include <iostream>
    
    using namespace std;
    
    class A{
    public:
        int k;
        void p1(){
           cout<<"p1"<<endl;
        }
    };
    
    int main(){
        cout<<"test"<<endl;
        A *a = 0;
        a->p1();
        return 0;
    }

    上面的代码竟然不会出错!

    using namespace std;
    
    class A{
    public:
        int k;
        void p1(){
           cout<<"p1 k="<<k<<endl;
        }
    };
    
    int main(){
        cout<<"test"<<endl;
        A *a = 0;
        a->p1();
        return 0;
    }

    这段代码就会出错了。

    //函数定义
    AudioHardwareInterface* AudioHardwareInterface::create()
    //函数调用
    mAudioHardware = AudioHardwareInterface::create();
    (来自Android2.2源码)

    上面的代码也是合法的。

    原因何在?

          对于任何非静态的函数,只要是内部不含有非静态成员变量都可以用类名来进行调用。如果其内部含有非静态成员变量,肯定会说这个函数没有声明的,因为没有对象,就不会给成员变量分配空间,所以这种访问是无效的。而函数就不同了。即使没有对象,只要是其内部不进行未分配访问,其函数是可以顺利执行的。

        典型的例子:

     effitive C++   p59
        PriorotyCustomer::operator=(const PriorityCustomer &rhs)
        {

        Customner::opertator=(rhs);
       ....
       }  

  • 相关阅读:
    Log4Net使用指南
    构建Asp.Net2.0 GridView复合多层表头的几种方法
    javaScript中如何定义类
    是不是silverlight 2 的bug
    领悟 JavaScript 中的面向对象
    web拖动Drag&amp;Drop原理
    一个不错的js验证框架
    MySQL中文参考手册
    高效实现数据仓库的七个步骤
    什么是ARP?如何防范ARP欺骗?
  • 原文地址:https://www.cnblogs.com/albert1017/p/3823884.html
Copyright © 2011-2022 走看看