非staticメンバー関数はクラス名::で呼び出され、空のポインタでメンバーを呼び出す方法はエラーありません.

3537 ワード

まず、このコードを見てみましょう.
#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);   ....   }