
Сообщение от
Миака
а если дописать просто чистую виртуальную функцию,а не деструктор,тоже работать не будет?
Как уже не раз было сказано выше, невозможно создать экземпляр абстрактного класса. Попытки создать такой экземпляр всегда будут приводить к ошибкам компиляции. Можно наследоваться и создавать объекты наследуемого класса, можно сделать в абстрактном функцию print чисто виртуальной, а в дочерних классах ее переопределять нужным образом.
C++ |
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
| class vector {
public:
virtual void print() = 0;
};
class vector_console : public vector {
public:
void print() {
// for (...)
// std::cout << ...
}
};
class vector_logfile : public vector {
public:
void print() {
// std::ofstream ofs ...
// for (...)
// ofs << ...
}
};
int main() {
vector vb; // error
vector_console vc; // ok
} |
|
Хотя это решение весьма уродливое. Лучше переопределить что-то другое.
Например, если вектор может выделять памяти больше, чем надо в текущий момент, тогда можно было бы выделить как pure-virtual метод, который расчитывает количество памяти. Получилось бы куда более интересней.