在virtual函数中调用static函数. 这样做一定不行吗?请指教//bow

解决方案 »

  1.   


    #include <iostream>
    using namespace std;class Base {
    public:
    static int j;
    static int incr(){
    return j++;
    }  virtual void play() const {
        incr();
      cout << "Base::play" << endl;
    cout << "Base::j="<<j<<endl;  }
    };class Child : public Base {
    public:
    int i;
    static int j; static int incr() {
        return j++;
      } Child(int ii = 0) : i(ii) {
        j = i;
      }  // Override interface function:
      void play() const {
      incr();
        cout << "Child::play" << endl;
    cout <<"Child::j="<<j<<endl;
      }};void TestVirtual(Base& ins) {
       ins.play();
    }int Child::j = 0;
    int Base::j=10;int main() {
      Child x;
      TestVirtual(x); // Upcasting
      return 0;
    }
      

  2.   

    It's better to change the "j++" to "++j".