私はオブジェクト指向アプローチとC++プログラミングの初心者です。 私の質問は、どのようなオブジェクトをインスタンス化していないクラスポインタが、そのクラス。以下、私は今日の下インスタンスを作成せずに非静的メンバー関数を呼び出す
#include <iostream>
class Base{
public:
Base(){
std::cout << "Base C-tor is called " << std::endl;
}
void fun(){
std::cout << "Base fun() is called " << std::endl;
}
void sorrow(){
std::cout << "Base Sorrow is called " << std::endl;
}
~Base(){
std::cout << "Base D-tor is called " << std::endl;
}
};
int main(){
Base *b1;
b1->fun();
b1->sorrow();
}
をしようとした作業コードは、コードのこの部分の出力です:
Base fun() is called
Base Sorrow is called
これは未定義の動作で、_workingコードではありません。 – user0042
オブジェクト内のデータメンバーに決してアクセスしない関数は、静的でなければなりません。また、あなたが示すデザインが有用かどうかは疑問です。 Cのような関数を記述してクラスを追加することは、オブジェクト指向のプログラミングではありません。初期化されていないポインタへのアクセスは、未定義の動作です。コンパイラが未使用のポインタを最適化することは、あなたが有効なコードを書いたことを意味するものではありません。 – Klaus