zoukankan      html  css  js  c++  java
  • 成员函数的重载&&隐藏&&覆盖

    /*
    *成员函数的重载,覆盖,隐藏
    *重载:
    *1.同样的范围(在同一个类中)
    *2.函数名同样
    *3.參数不同
    *4.virtualkeyword可有可无
    *覆盖是指派生类覆盖基类的函数,特征是:
    *1.不同的范围(分别位于基类与派生类中)
    *2.函数名同样
    *3.參数同样
    *4.基类函数必须有virtualkeyword
    */
    #include<iostream>
    using namespace std;
    class B
    {
    public:
    	 void f(int x)
    	{cout<<"B::f(int)"<<endl;}
    	void f(float x)
    	{cout<<"B::f(float)"<<endl;}
    	virtual void g(void)
    	{cout<<"B::g(void)"<<endl;}	
    };
    class D : public B
    {
    public:
    	virtual void g(void)
    	{cout<<"D::g(void)"<<endl;}
    };
    int main()
    {
    	D d;
    	B *pb = &d;
    	pb->f(3.14f);//B::f(float)
    	pb->f(42);//B::f(int)
    	pb->g();//D::g(void)
    	return 0;
    }

    /*
    *隐藏:
    *1.派生类的函数与基类函数同名,但參数不同。此时不论
    *  有无virtualkeyword基类函数将被隐藏
    *2.派生类函数与基类函数同名同參。但基类没有virtual
    *  keyword。基类函数将被隐藏
    */

    #include<iostream>
    using namespace std;
    class B
    {
    public:
    	virtual void f(float x)
    	{cout<<"B::f(float)"<<endl;}
    	void g(float x)
    	{cout<<"B::g(float)"<<endl;}
    	void h(float x)
    	{cout<<"B::h(float)"<<endl;}	
    };
    
    class D : public B
    {
    public:
    	virtual void f(float x)
    	{cout<<"D::f(float)"<<endl;}
    	void g(float x)
    	{cout<<"D::g(float)"<<endl;}
    	void h(float x)
    	{cout<<"D::h(float)"<<endl;}
    };
    
    int main()
    {
    	D d;
    	B *pb = &d;
    	D *pd = &d;
    
    	pb->f(3.14f);//D::f(float)//覆盖
    	pd->f(3.14f);//D::f(float)
    
    	pb->g(3.14f);//B::g(float)
    	pd->g(3.14f);//D::g(float)//隐藏
    
    	pb->h(3.14f);//B::h(float)
    	pd->h(3.14f);//D::h(float)//隐藏
    	return 0;
    }



  • 相关阅读:
    微信小程序开发学习--页面事件和数据绑定
    检测小程序版本更新提示
    vue-cli脚手架
    链表中倒数第K个结点
    调整数组顺序使奇数位于偶数前面
    数值的整数次方(十二)
    二进制中1的个数(十一)
    覆盖矩形(十)
    变态跳台阶(九)
    跳台阶(八)
  • 原文地址:https://www.cnblogs.com/llguanli/p/6754034.html
Copyright © 2011-2022 走看看