将方法添加到创建的类C ++中

时间:2014-11-29 15:17:40

标签: c++

您好我在某个头文件中有一个类。让我们说它看起来像这样:

class MyClass
{
  private:
    int ID;
    void method1();
  public:
    MyClass(int ID){this->ID = ID;};
    void method2();
}
编辑:我需要两个对象,它们都具有与MyClass相同的结构+有一些自己的方法(所有这些对象都没有任何参数并将返回void - 就像method1()一样,但是不同的实施)。我还需要定义类型,可以指向此处创建的新方法。所以我可以将它们作为一种类型传递给另一个函数。我需要的最后一件事是从新方法中访问MyClass的属性和方法。

2 个答案:

答案 0 :(得分:2)

无法在不更改此类的情况下向现有类添加新方法。

如果您想使用仅添加新方法的富集类,您需要做的就是:

class MyEnrichedClass : public MyClass {
public: 
   MyEnrichedClass (int ID) : MyClass(ID) {}
   void myNewFantasticMethod (...) { ... }
};

在添加的方法中,您可以访问基类的所有公共成员和受保护成员(但不能访问私有成员)。

如果您事先知道需要一个定义良好的签名方法并且用于特定目的,但是您想要动态定义它,那么您可以将一个函数对象作为成员并让您的方法调用此函数对象(或函数指针,如果你愿意)。但是,您的动态函数既不能访问私有也不能访问受保护的成员。

答案 1 :(得分:0)

你可能正在寻找的是继承。基本上,您创建一个父类(通常称为基类)和一个子类,它从其基类继承(因此继承)成员和函数。

// Base class
class BaseClass
{
public:
    int GetNumber() { return 10; }  
};

// Child class
class ChildClass: public BaseClass // public BaseClass means that this class inherits from other class
{
public:
    string GetString() { return "Your string"; }
};

在此示例中,BaseClass只有一个函数,而ChildClass将有两个函数,一个写入其中,另一个函数继承。这是一个例子。

BaseClass base;
base.GetNumber(); // Base class only has 1 function

ChildClass child;
child.GetNumber(); // It has inherited function
child.GetString(); // It also has its own function, which base class doesn't have

您可以在此处阅读有关继承的深入教程: http://www.cplusplus.com/doc/tutorial/inheritance/