本文共 1335 字,大约阅读时间需要 4 分钟。
这几天学了一下继承,对于这几个概念比较一下。如有错漏,还望大神指摘。
共同点:
重载、隐藏和虚函数,说的都是重名函数,即函数名相同。不同点:
class A{ public: void test(){ cout << "test void" << endl; } void test(int a){ cout << "test int" << endl; }}
class A{ public: void test(int a){ cout << "A test" << endl; }}class B : public A{ public: void test(){ cout << "B test" << endl; }}void main(){ B b, *p = &b; p->test(); //p为B类指针,因此会调用B中的test,输出"B test" ((A*)p)->test(1); //转化为A类指针后,会调用A中的test,输出"A test" ((A*)p)->test(); //无法跨作用域调用,A类中函数需要传入int参数,所以这里会编译出错 p->A::test(1); //子类使用限定名调用父类函数}
class A{ public: virtual void test(){ cout << "A test" << endl; }}class B : public A{ public: void test(){ //父类中声明为虚函数的,继承的都是虚函数 cout << "B test" << endl; }}void main(){ B b, *p = &b; p->test(); //输出"B test" ((A*)p)->test(); //无论使用什么样的指针调用,都会输出"B test" ((A)b).test(); //此处将b强制转化为A类,就变成了A类对象,所以会输出"A test" p->A::test(); //子类使用限定名调用父类函数}
转载地址:http://kxxzi.baihongyu.com/