Avete letto bene. L'esempio di base può essere fornita con: legame
using FuncType = int(*)(int,int); // pointer to a function
// taking 2 ints and returning one.
int add(int a, int b) { return a + b; }
int substract(int a, int b) { return a - b; }
statico è quando associa è noto al momento della compilazione:
int main() {
std::cout << add(4, 5) << "\n";
}
non lascia spazio per un cambiamento dinamico del funzionamento, e quindi è vincolato staticamente.
int main() {
char op = 0;
std::cin >> op;
FuncType const function = op == '+' ? &add : &substract;
std::cout << function(4, 5) << "\n";
}
mentre qui, a seconda dell'input, si ottiene 9 o -1. Questo è legato dinamicamente.
Inoltre, nelle lingue orientate agli oggetti, le funzioni virtual
possono essere utilizzate per associare dinamicamente qualcosa. Un esempio più dettagliato potrebbe quindi essere:
struct Function {
virtual ~Function() {}
virtual int doit(int, int) const = 0;
};
struct Add: Function {
virtual int doit(int a, int b) const override { return a + b; }
};
struct Substract: Function {
virtual int doit(int a, int b) const override { return a - b; }
};
int main() {
char op = 0;
std::cin >> op;
std::unique_ptr<Function> func =
op == '+' ? std::unique_ptr<Function>{new Add{}}
: std::unique_ptr<Function>{new Substract{}};
std::cout << func->doit(4, 5) << "\n";
}
semanticamente equivalente all'esempio precedente ... ma introduce tardiva da virtual
funzione che è comune in programmazione orientata agli oggetti.
fonte
2013-08-03 17:17:09
* "[...] il binding precoce (o statico) fa riferimento al binding in fase di compilazione e il binding tardivo (o dinamico) fa riferimento al binding in runtime" * ..... Sì, questo è tutto. Cos'altro vuoi sapere? Qual è la tua domanda/confusione/dubbio? – Nawaz
Non riesco a credere che non sia stato chiesto prima. – Shoe
Argomento molto vecchio per scrivere nuovi esempi per. Date un'occhiata a questo [collegamento] (http://www.learncpp.com/cpp-tutorial/124-early-binding-and-late-binding/) – loxxy