基类和派生类 小知识点
Posted zhiminzeng
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了基类和派生类 小知识点相关的知识,希望对你有一定的参考价值。
1、子类调用父类的同名函数(非虚函数)
class Base { public: void func(); void func(int i); }; class Element : public Base { public: void func(int i); // 当子类有父类的同名函数 }; int main() { Element ele; ele.func(12); // 只会调用子类 ele.func(); // 编译器报错 }
// 如果要让 ele.func(); 能够调用父类的函数,子类需要 class Element : public Base { public: void func(int i); public: using Base::func; // 通过using 让父类的同名函数,在子类可见,暴露函数名,但无法指定形参类型,public或protect // 会将所有的同名函数暴露,不能只暴露一部分 }; int main() { Element ele; ele.func(12); // 还是只会调用子类 ele.func(); // 这样的话会调用父类的func() 函数 }
//或者直接在子类中直接调用基类同名函数 class Element : public Base { public: void func(int i){ Base::fun(i); Base::fun(); // 直接调用父类同名函数 } };
2、派生类初始化或赋值基类
只有派生类的基类部分会被拷贝或复制,派生类部分将被忽略掉
class Humen; // 基类 class Men : public Humen; int main() { Men men; Humen humen1(men); // 只会调用基类的拷贝构造函数,将派生类的基类部分拷贝到基类 Humen humen2; humen2 = men; // 同样只会调用基类的赋值运算符,将派生类的基类部分赋值给基类 return 0; }
以上是关于基类和派生类 小知识点的主要内容,如果未能解决你的问题,请参考以下文章