我想用虚函数机制使用友元?请问GG JJ该怎么办?
我的错误代码:
class a
{
 virtual  friend ostream& operator << (ostream& os,int a){};

}
class b: public a
{

 friend ostream& operator << (ostream& os,int a){};
}
错误信息:
error C2575: '<<' : only member functions and bases can be virtual

解决方案 »

  1.   

    你一旦加了friend关键字,就说明这个函数/变量不是本类的成员了,不是成员函数当然不能是virtual了。你说的,想用虚函数机制使用友元是什么意思?说清楚一点。
      

  2.   

    我想用:
    a* a0 = new b;cout<<a0<<endl;时调用b中的函数。
      

  3.   

    呵呵,不行。
    因为:
    class a;
    class b:public a;
    {}
    class c:public a;
    {}
    class d:public a;
    {}
    a a0[3] = {new b, new c, new d};
    for(int i=0; i<3; i++)
    cout<<a0[i];
      

  4.   

    bobqi(灰冷)的想法不错。高手级啊……
      

  5.   

    #include "stdafx.h"
    #include <iostream>
    using namespace std;class a
    {
    friend ostream& operator<<(ostream& os,a& classa){ classa.output(os); return os; };
    virtual void output(ostream& os){os<<"a";}
    };
    class b:public a
    {
    friend ostream& operator<<(ostream& os,a& classb){ classb.output(os); return os; };
    virtual void output(ostream& os){os<<"b";}
    };
    class c:public a
    {
    friend ostream& operator<<(ostream& os,a& classc){ classc.output(os); return os; };
    virtual void output(ostream& os){os<<"c";}
    };
    class d:public a
    {
    friend ostream& operator<<(ostream& os,a& classd){ classd.output(os); return os; };
    virtual void output(ostream& os){os<<"d";}
    };int main(int argc, char* argv[])
    {
    a* a0[3] = {new b(), new c(), new d()};
    for(int i=0; i<3; i++)
    cout<<(*a0[i])<<endl; 
    return 0;
    }输出结果:
    b
    c
    d