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