//: C15:Early.cpp // From Thinking in C++, 2nd Edition // Available at http://www.BruceEckel.com // (c) Bruce Eckel 2000 // Copyright notice in Copyright.txt // Early binding & virtual functions #include <iostream> #include <string> using namespace std; class Pet { public: virtual string speak() const { return ""; } }; class Dog : public Pet { public: string speak() const { return "Bark!"; } }; int main() { Dog ralph; Pet* p1 = &ralph; Pet& p2 = ralph; Pet p3; // Late binding for both: cout << "p1->speak() = " << p1->speak() <<endl; cout << "p2.speak() = " << p2.speak() << endl; // Early binding (probably): cout << "p3.speak() = " << p3.speak() << endl; cout << sizeof (p3) << endl; return 0; } ///:~ |
原帖由 wangshzh 于 2008-7-4 21:22 发表
《c++编程思想》上说当编译器知道一个对象的确切类型时,为了提高效率,可能会选择early binding, 而不是late binding。那具体是什么时候呢,没有采用指针或者引用进行upcasting的时候吗?
书中给出例子的代码 ...
欢迎光临 Chinaunix (http://bbs.chinaunix.net/) | Powered by Discuz! X3.2 |