2014-11-29 6 views
2

Здравствуйте, у меня есть класс в каком-то заголовочном файле. Скажем, это выглядит следующим образом:Добавление методов в созданный класс C++

class MyClass 
{ 
    private: 
    int ID; 
    void method1(); 
    public: 
    MyClass(int ID){this->ID = ID;}; 
    void method2(); 
} 

EDIT: Мне нужно два объекта, которые одновременно имеет ту же структуру, как MyClass + некоторые из их собственных методов (все они не будут иметь каких-либо параметров, и будут возвращаться void - подобный метод1(), но с другой реализацией). Я также должен иметь определенный тип, который может указывать на новые методы, созданные здесь. Поэтому я могу передать их в какую-то другую функцию как один тип. Последнее, что мне нужно, - получить доступ к атрибутам и методам MyClass из новых методов.

+2

В C++ мы никогда не добавлять методы к существующим классам или объектам, это не имеет никакого смысла. Мы создаем новые классы из существующих по наследству. –

+0

Я спрашиваю, есть ли другой способ, чем наследование. Итак, ваш ответ: нет? – Dracke

+0

Inheritance не добавляет методы к существующим объектам или классам. Поэтому непонятно, что вы подразумеваете под «другим» способом. Существует даже один способ добавить методы к существующему. –

ответ

2

Невозможно добавить новый метод в существующий класс без изменения этого класса.

Если вы хотите работать с обогащенной класс добавления только новый метода методы, все, что вам нужно сделать, это:

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

В ваших добавленных методах у вас есть доступ ко всем общественным и защищенным членам базового класса (но не частных).

Если вы заранее знаете, что вам нужен метод с четко выраженной сигнатурой и для определенной цели, но вы хотите определить его динамически, вы можете иметь объект функции как член и вызвать метод для этого объекта функции (или указатель функции, если вы предпочитаете). Но ваша динамическая функция не будет иметь доступа ни к частным, ни к защищенным членам.

+0

Так что, если мне нужно также получить доступ к частным вещам, мне нужно сделать их защищенными? – Dracke

+0

Да! Это оно ! – Christophe

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/

Смежные вопросы