函数调用通过c ++中的类指针

时间:2013-12-13 05:51:43

标签: c++

#include"iostream"
using namespace std;
class base{

public:
 void f()
        {
        cout<<"base f:"<<endl; // prints base f:
        }
};


int main()
{
base *b; // even same out put with " base *b =NULL; "

b->f();
return 0;
}

O / p:base f:

任何人都可以解释如何调用函数而不将对象分配给指针。

Thanks.

3 个答案:

答案 0 :(得分:3)

调用未初始化(或初始化为0)指向对象的成员函数是未定义的行为,但是它可能有效,因为没有尝试访问对象的变量,这里没有vtable。您可以查看此功能,如

void f_base(base* p)
{
   cout << "base f:" << endl;
}

没有访问权限 - 没有错误,在所有现代编译器上它都可以工作,但它可以随时更改。

答案 1 :(得分:0)

这是无效代码,但由于base :: f()中没有任何内容访问成员变量,因此不会触及无效内存。

如果你添加一个成员并尝试在该功能中打印出来,你几乎无疑会崩溃。

答案 2 :(得分:0)

您需要使用new

base *b; // even same out put with " base *b =NULL; "

应该是

base *b = new base;

...需要delete来防止内存泄漏