继承中的非虚成员函数

来源:互联网 发布:windows改变图标 编辑:程序博客网 时间:2024/04/30 02:11

都是在公共继承的前提下。类成员函数包括常用的两种。非虚函数和虚函数。非虚函数是静态绑定,虚函数是动态绑定。

继承中的非虚函数(一般不用,都是在迷糊中错用)

这种情况下,调用哪个函数与指针类型有关,如果指针类型是子类类型,则调用子类的函数,如果是父类的类型调用父类的函数

1,类D会不会自己复制一个和类A一模一样的print函数呢?

通过程序可以说明:继承体系中,子类继承自父类的函数,他们指向同一个函数入口,即他们共享父类的函数

比如下面代码:

#include <iostream>using namespace std;class B{public:void print(){ static int num=1;cout << a<<" "<<num<<endl;num++;}B():a(10){}public:int a;};class D:public B{public:D():a(20){}public:int a;};void main(){B b;b.print();//10 1D d;d.print();  //输出为10 2}


2如果子类有同名的函数,(不是同类型),相当于父类同名函数被隐藏了,子类无法调用父类的函数了。

#include <iostream>using namespace std;class B{public:void print(){ static int num=1;cout << a<<" "<<num<<endl;num++;}B():a(10){}public:int a;};class D:public B{public:void print(int i){cout << i<<endl;}D():a(20){}public:int a;};void main(){B b;b.print();//10 1D d;//d.print();  //出错,不能调用父类的同名函数,相当于被隐藏d.print(100);//100}

以上讨论的都是在继承中非虚函数,是静态绑定。


0 0