Вызов метода производного класса из справочника базового класса

class Material
{
public:
 void foo()
 {
  cout << "Class Material";
 }
};

class Unusual_Material : public Material
{
public:
 void foo()
 {
  cout << "Class Unusual_Material";
 }
};

int main()
{
 Material strange = Unusual_Material();
 strange.foo(); //outputs "Class Material" 

 return 0;
}

Я бы хотел, чтобы в результате на консоли отображался "Class Unusual_Material". Есть ли способ добиться этого? В моей программе есть класс Material, из которого происходят другие более конкретные материалы. Метод Material :: foo () представляет метод в Material, который подходит для большинства материалов, но иногда необходимо определить другой foo () для материала с необычными свойствами.

Все объекты в моей программе содержат поле материала. В случае, если им назначен необычный материал, я бы хотел, чтобы вызывался производный, необычный foo.

Это, вероятно, либо довольно просто, либо невозможно, но я не могу понять это в любом случае.

Спасибо

10
задан user487100 17 November 2010 в 20:47
поделиться