如何覆盖在C ++函数内的另一个类中定义的虚方法

时间:2012-12-21 11:07:14

标签: c++

我的class A位于单独的文件(sayfile1.cpp

class A{
public:
      virtual int add(){
      int a=5;
      int b=4;
      int c = a+b;
      return c;
      }
};

现在在一个不同的文件中(比如说file2.cpp),我有一个函数(我在这个函数中还有很多其他东西),我想在其中创建一个继承自class A的类并实现在class A中声明的虚方法。

void function(Mat param1, Mat param2)
{
  //Some process here..
  ..
  ..
  int c=100;
  class B:public A{
  public:
        virtual int add(){

        return c;
        }
  };

}

现在,如果我要调用函数int add(),我希望c的结果为100而不是9。

是否可以在C ++中执行类似的操作?

提前致谢

2 个答案:

答案 0 :(得分:1)

定义成员变量:

class B: public A {
    int c_;
public:
    explicit B(int c):c_(c){};
    virtual int add() {
        return c_;
    }
}
B variable((100));

答案 1 :(得分:0)

您需要将file1.cpp拆分为file1.h

#ifndef FILE1_H
class A {
public:
  virtual int add();
};
#endif

file1.cpp及其实施:

int A::add { /*your code * }

在另一个文件中,您只包含头文件:

#include "file1.h"

以下在C ++中不合法:

void function(Mat param1, Mat param2)
{
  //Some process here..
  ..
  ..
  int c=100;
  class B:public A {
  public:
    virtual int add(){

    return c;
    }
 };

}

相反,你需要这样的东西:

class B : public A {
public:
    B(int v) : c(v) {}
    virtual int add(){ return c; }
private:
    int c;
};

void function(Mat param1, Mat param2)
{
  //Some process here..
  ..
  ..
  int c=100;
  B o(c);

}