c++之重载、重写、重定义

一、定义

    重载:重载指的是在同一个类中发生的,两个成员函数拥有相同的名称,但是他们的参数不一样。

              但是不能通过返回类型来判断。

    重定义:重定义也叫隐藏。它是发生的子类父类中的,即它的发生条件是继承。子类重新定义和父

                  类相同的函数他们的参数列表可以不同。(重定义的是父类的非虚函数)

    重写:也叫覆盖。它也是发生在子类中的,即它发生的条件也是继承关系。当我们对别人提供的方

              法不满意时,我们可以通过继承这个类然后将其方法改成我们需要的逻辑。

            (1)、被重写的函数不能是static的。

            (2)、函数的三要素(函数名、函数参数、函数返回值)完全一样。

            (3)、virtual函数重新是多态产生的必要条件之一。

二、应用

    重载:

    重载可以通过调用相同的函数名来实现不同数据类型的运算。

class A
{
        public :
        int a ;
        char b[10];
        void get_a(int &a)
        {
        	this->a = a;
        	printf("%d",this->a);
        }
        void get_a(const char *c)
        {
        	strcpy(this->b,c);
        	printf("%s",this->b);
		}
}; 
int main()
{
	int a= 10;
	const char *b= "sos";
	A d;
	d.get_a(b);
	d.get_a(a);  	
}

    重定义(也叫隐藏):

    

class A
{
	public :
	int a ;
	void get_a(int &b)
	{
		this->a = b;
		printf("%d",this->a);
	}	
};
class b :public A
{
	public :
	char b[10] ;
	void get_a(const char *p)
	{
		strcpy(this->b,p);
		printf("%s",this->b);
	}	
};
int main()
{
	int a=2;
	const char *p ="lucifer";
	b c;
	c.get_a(p);
	//c.get_a(a); //此时这句话会报错说明是否参数类型的改变,默认调用子类的函数
	c.A::get_a(a); //这是父类函数的调用方法 		
}

    重写:

#include <iostream>
#include <stdio.h>
#include <stdlib.h>

using namespace std;

class A
{
	public :
	int a ;
	virtual void get_a(int &b)
	{
		this->a = b;
		printf("%d",this->a);
		printf("这是父类函数"); 
	}	
};
class b:public A
{
	public :
	int  b;
	virtual void get_a(int &c)
	{
		this->b = c;
		printf("%d",this->b);
		printf("这是子类函数"); 
	}	
};
int main()
{
	int a=1;
	A *p = NULL;
	b c;
	p = &c;
	p->get_a(a);  //这个函数的调用取决于父类函数有无virtual修饰,若有则调用子类的,否则调用父类的。		
}		

    上面这个其实就产生了多态,不过我会专门去说说多态。

!欢迎各位来指出不足之处

    






    

猜你喜欢

转载自blog.csdn.net/qq_41003024/article/details/80211456
今日推荐