#include <iostream>
#include <cassert>
class Fireplace {
public :
// (.. ) 18
Fireplace() : temperature(18) { }
// -
int getTemperature() const {
return temperature;
}
// -
void setTemperature( int N) {
temperature = N;
}
// N
virtual void heat( int N) {
// preconditions
int old_temperature = getTemperature();
// 800
assert(getTemperature() + N < 800);
std::cout << " " ;
setTemperature(getTemperature() + N);
// postconditions
// + N
assert(getTemperature() == old_temperature + N);
}
private :
int temperature;
};
class Human : public Fireplace {
public :
Human() { setTemperature(36); }
virtual void heat( int N) {
// preconditions
int old_temperature = getTemperature();
assert(getTemperature() + N < 800); // assert , ..
// 800 -
// 45
// assert:
// assert(getTemperature() + N < 45);
//
// !
// DbC:
// 1) ,
// 2) ,
// - Human Fireplace
// .. LSP,
// /
//
std::cout << " " ;
setTemperature(getTemperature() + N);
// postconditions . .
// + N
assert(getTemperature() == old_temperature + N);
}
};
int main()
{
Fireplace *f = new Human;
f->heat(600);
return 0;
}
* This source code was highlighted with Source Code Highlighter .
Source: https://habr.com/ru/post/72907/
All Articles