// Пример 1.
// верно
while (впереди свободно) шаг;
// неверно — можно врезаться в препятствие, если нельзя сделать ни шагу
do шаг while (впереди свободно);
// Пример 2.
// Неверно — пока у вас в руках нет рубашки, условие цикла некорректно
while (рубашка грязная) возьми рубашку;
// верно
do возьми рубашку; while (рубашка грязная);
boolean[][] visited = new boolean[ROW][COL];
static final byte DIR_UNKNOWN = 0;
static final byte DIR_UP = 1;
...
byte[][] bestDirection = new boolean[ROW][COL]; // изначально заполнено DIR_UNKNOWN
for (int dir = DIR_UP; dir <= DIR_RIGHT; ++dir) {
...
bestDirection[row][col] = dir;
}
Rest::function(char * function_name, int (App::* f)(String), App& object)
// вместо App можно какой-то интерфейс, который App реализует
…
object.*f("string");
...
bt_rest.function("", &App::startManufacturing, *this);
class App {
static int startManufacturing(String command)
};
Rest::function(char * function_name, int (*f)(String, void*), void*);
void doStartManufacturing(String command, void* closure) {
reinterpret_cast<App*>(closure)->startManufacturing(command);
}
...
bt_rest.function("startManufacturing", doStartManufacturing, this);
App app;
int doStartManufacturing(String command) { return app.startManufacturing(command); }
...
bt_rest.function("startManufacturing", doStartManufacturing);
class ComparatorBase
{
public:
virtual ~ComparatorBase() = default;
};
class Comparator : public ComparatorBase {
public:
virtual int compare(Comparator *t)=0;
};
class User : public Comparator{
public:
int compare(ComparatorBase *u) override {
return 1;
}
};
class Father
{
public:
virtual Father& foo();
virtual ~Father() = default;
};
class Son : public Father
{
public:
Son& foo() override;
};
int User::compare(Comparator *u)
{
auto* v = dynamic_cast<User*>(u);
if (!v)
return false;
return v->name > this->name;
}
template <class T>
class Comparator {
public:
virtual int compare(T *t)=0;
virtual ~Comparator() = default;
};
class User : public Comparator<User> {
private:
std::string name;
public:
User(std::string name){this->name=name;}
int compare(User *u);
void showName(){std::cout<<"Name "<<this->name<<std::endl;}
};
int User::compare(User *u)
{
return u->name > this->name;
}