非staticメンバー関数はクラス名::で呼び出され、空のポインタでメンバーを呼び出す方法はエラーありません.
3537 ワード
まず、このコードを見てみましょう.
上のコードが間違っていないなんて!
このコードはエラーになります.
上のコードも合法です.
原因は何ですか.
非静的関数の場合、内部に非静的メンバー変数が含まれていない場合はクラス名で呼び出すことができます.内部に非静的メンバー変数が含まれている場合、この関数は宣言されていません.オブジェクトがないため、メンバー変数にスペースが割り当てられないため、このアクセスは無効です.関数は違いますオブジェクトがなくても、その内部に未割当てアクセスがなければ、その関数はスムーズに実行できます.
典型的な例:
effitive C++ p59 PriorotyCustomer::operator=(const PriorityCustomer &rhs) {
Customner::opertator=(rhs); .... }
#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); .... }