nixp.ru v3.0

20 октября 2017,
пятница,
20:58:48 MSK

DevOps с компанией «Флант»
sandy написал 18 июня 2007 года в 13:49 (435 просмотров) Ведет себя как мужчина; открыл 10 тем в форуме, оставил 54 комментария на сайте.

Возможна ли такая конструкция:

class Function {

public:

Function() {}

virtual void eval()=0;

virtual int eval()=0;

virtual double eval()=0;

virtual char eval()=0;

virtual char* eval()=0;

};

class MyFunction1 : public Function

{

public:

MyFunction1(): {}

int eval(int i)

{

/* … */

return i;

}

void eval()

{

/* … */

}

};

class MyFunction2 : public Function

{

public:

MyFunction2() {}

char eval(char i)

{

/* … */

return i;

}

};

/* … */

А потом еще и так:

std::map m;

m["MyFunction1"]=new MyFunction1;

m["MyFunction2"]=new MyFunction2;

/* … */

sandy
sandy
Возможна ли такая конструкция:

class Function {

public:

Function() {}

virtual void eval()=0;

virtual int eval()=0;

virtual double eval()=0;

virtual char eval()=0;

virtual char* eval()=0;

};

Так нельзя точно. Тогда так:

class Function {

public:

Function() {}

virtual ~Function() {}

};

metal

С точки зрения логики это точно более правильный вариант, но 1-й тоже возможен.

sandy
metal
С точки зрения логики это точно более правильный вариант, но 1-й тоже возможен.

О первом можно подробнее. Разве можно перегружать чисто виртуальные функции?

metal

Может я чего забыл, но вроеде можно. Сейчас проведу эксперемент. В предыдущем посте я думал, что ты пишешь о виртуальном деструкторе, его иметь очень желательно в данном случае.

metal

Да верно их перезагружать нельзя.

metal

Уточнение нельзя перезагружать тип возващаемого значения для виртуальных функций.