Я бы хотел добавить дополнительную функциональность без изменения существующего класса.Расширение существующего класса C++
Say,
class base{
public:
int i;
base(){i = 1;}
virtual void do_work(){ //Do some work}
};
Если я хочу, чтобы добавить serialization
функцию член к ней, я просто создать производный класс
class derived:public base{
public:
void serialize();
};
void derived::serialize(){
cout << "derived class" << endl;
}
И мне нужно обрабатывать существующие base
объекты, например.
int main(){
base a;
derived & b = static_cast<derived &>(a);
b.serialize();
}
Этот пример работает без проблем. Но я знаю, что downcast
- static_cast
- это то, чего следует избегать в целом.
Но я хотел бы знать, можно ли считать downcast
для данного конкретного случая использования безопасным, поскольку класс derived
имеет только одну дополнительную функцию-член. Будет ли у него какое-то потенциальное неопределенное поведение для доступа к vtable
?
В чем 'vtable' вы говорите? Я не вижу никаких виртуальных функций. –
Возможный дубликат [Downcasting с использованием Static \ _cast в C++] (http://stackoverflow.com/questions/6322949/downcasting-using-the-static-cast-in-c) – Chad
Кроме того, 'производный'' IS- A '' base', а не наоборот, но вы производите 'a' (т. Е. Тип' base') для типа 'производного' ... –