注册 登录
编程论坛 C++教室

C++的问题:使用基类成员函数的指针产生多态性,对输出结果不理解

wxz11191975 发布于 2012-09-04 18:41, 449 次点击
#include <iostream>
using namespace std;

class base{
public:
    virtual void print(){cout<<"In Base"<<endl;}
};

class derived:public base{
public:
    void print(){cout<<"In Derived"<<endl;}
};

void display(base *pb,void (base::*pf)())
{(pb->*pf)();}

void main(){
    derived d;
    base *pb=&d;
    void (base::*pf)();
    pf=base::print;
    display(pb,pf);
}
就这个程序,我以为它会出现“In Base”的,结果它给我看“In Derived”。不能理解,请求指点。谢谢!
3 回复
#2
pangding2012-09-05 00:23
只有静态函数成员才能取地址吧。这样写是不是应该不合法?楼主用的什么编译器?
#3
rjsp2012-09-05 08:03
首先代码语法就是错误的,其次,既然标题说了“……指针产生多态性”,为什么又对输出In Derived不理解?

程序代码:
#include <iostream>
using namespace std;

class base {
public:
    virtual void print() { cout<<"In Base"<<endl; }
};

class derived:public base{
public:
    virtual void print() { cout<<"In Derived"<<endl; }
};

void display( base* pb, void (base::*pf)() ) {
    (pb->*pf)();
}

int main() {
    derived d;
    base* pb = &d;
    void (base::*pf)() = &base::print;
    display( pb, pf );

    return 0;
}

#4
gaoyao4692012-09-05 15:36
#include <iostream>
using namespace std;

class base {
public:
    void print() { cout<<"In Base"<<endl; }
};

class derived:public base{
public:
    void print() { cout<<"In Derived"<<endl; }
};

void display( base* pb, void (base::*pf)() ) {
    (pb->*pf)();
}

int main() {
    derived d;
    base* pb = &d;
    void (base::*pf)() = &base::print;
    display( pb, pf );

    return 0;
}
1