C++中的动态绑定与静态绑定
2011-09-30 17:04
120 查看
这些天遇到了一些编程上的问题, 于是重新查阅《C++ Primer》这本巨擘。在其中面向对象的章节中,看到了动态绑定(dynamic binding)与静态绑定(static binding)的内容。想来虽然很早就有了这一本这样的书,却没有很好的精读细读,想来还是有点汗颜的。看来一些基础的知识还是要掌握的牢固为妙,不然,你会因为不精通而在编码过程中犯下许多低级错误。 通过查阅资料,在这里谈一下自己对动态绑定及静态绑定的理解。
首先要解释什么叫做动态绑定和静态绑定:
一言以蔽之: C++中,非虚函数都是静态绑定,而虚函数却是动态绑定。
C++语言默认采用的是静态绑定。
class Person {
public:
void
func() {
printf("AAAAAAAAAAAA\n");
}
};
class Child : public Person
{
public :
void
func() {
printf("BBBBBBBBBBBB\n");
}
};
int main()
{
Child child;
Person person = child;
Person
*ptr = &child;
person.func();
ptr->func();
return
0;
}
上述打印的结果:
AAAAAAAAAAAA
AAAAAAAAAAAA
因为动态绑定的执行效率更低,c++默认采用静态绑定。如果需要动态绑定,则需要特别声明,采用virtual标识。
1.
静态绑定:根据编译时申明的变量类型,来决定调用的是哪个类型的函数;
2.
动态绑定:根据运行时实际赋给变量的类型,来决定调用的是父类或子类的函数。
如果将Person类的func函数加上virtual修饰,让其成为虚函数。
class Person {
public:
virtual
void func() {
printf("AAAAAAAAAAAA\n");
}
};
上述打印的结果:
AAAAAAAAAAAA
BBBBBBBBBBBB
只有通过指针或引用来访问对象的虚函数时,才能够进行动态绑定。
故上述的
Person person =
child;
person.func();
调用的函数还是Person类的func,因为没有动态绑定。
首先要解释什么叫做动态绑定和静态绑定:
一言以蔽之: C++中,非虚函数都是静态绑定,而虚函数却是动态绑定。
C++语言默认采用的是静态绑定。
class Person {
public:
void
func() {
printf("AAAAAAAAAAAA\n");
}
};
class Child : public Person
{
public :
void
func() {
printf("BBBBBBBBBBBB\n");
}
};
int main()
{
Child child;
Person person = child;
Person
*ptr = &child;
person.func();
ptr->func();
return
0;
}
上述打印的结果:
AAAAAAAAAAAA
AAAAAAAAAAAA
因为动态绑定的执行效率更低,c++默认采用静态绑定。如果需要动态绑定,则需要特别声明,采用virtual标识。
1.
静态绑定:根据编译时申明的变量类型,来决定调用的是哪个类型的函数;
2.
动态绑定:根据运行时实际赋给变量的类型,来决定调用的是父类或子类的函数。
如果将Person类的func函数加上virtual修饰,让其成为虚函数。
class Person {
public:
virtual
void func() {
printf("AAAAAAAAAAAA\n");
}
};
上述打印的结果:
AAAAAAAAAAAA
BBBBBBBBBBBB
只有通过指针或引用来访问对象的虚函数时,才能够进行动态绑定。
故上述的
Person person =
child;
person.func();
调用的函数还是Person类的func,因为没有动态绑定。
相关文章推荐
- 再次探讨C++的动态绑定和静态绑定
- 深入理解C++的动态绑定和静态绑定
- 深入理解C++的动态绑定和静态绑定
- C++静态绑定与动态绑定
- 深入理解C++的动态绑定和静态绑定
- 深入理解C++的动态绑定和静态绑定
- 深入理解C++的动态绑定和静态绑定
- 深入理解C++的动态绑定和静态绑定
- c++动态绑定、静态绑定与java中动态绑定与静态绑定的比较
- 深入理解C++的动态绑定和静态绑定
- 深入理解C++的动态绑定和静态绑定
- C++学习笔记(三):动态绑定与静态绑定
- 深入理解C++的动态绑定和静态绑定
- c++的动态绑定与静态绑定
- 深入理解C++的动态绑定和静态绑定
- 深入理解C++的动态绑定和静态绑定
- C++中动态绑定和静态绑定
- 深入理解C++的动态绑定和静态绑定
- 深入理解C++的动态绑定和静态绑定
- 深入理解C++的动态绑定和静态绑定