C++类中的函数重载

类中的函数重载

  • 函数重载
  • 类中的重载
  • 重载的意义

函数重载

  • 函数重载的本质为相互独立的不同函数
  • C++中通过函数名和函数参数确定函数调用
  • 无法直接通过函数名得到重载函数的入口
  • 函数虫子啊必然发生在同一个作用域中

类中的重载

  • 构造函数重载(在前面已经说过了)
  • 普通成员函数的重载
  • 静态成员函数的重载

万变不离其中:

  • 重载函数的本质为多个不同的函数
  • 函数名和参数列表是唯一的标识
  • 函数重载必须发生在同一个作用域中(全局函数和类中成员函数因为不在同一个作用域所以不能重载)
#include
class Test
{
	int i;
public:
	Test()
	{
		i = 0;
		printf("Test() \n");
	}
	Test(int v)
	{
		i = v;
		printf("Test(int v) \n");	
	}
	Test(const Test& t)
	{
		this->i = t.i;
		printf("Test(const Test& t) \n");	
	}
	int getI()
	{
		return i;
	} 
	static void func()
	{
		printf("static void func()\n");
	}
	void func(int v)
	{
		printf("void func(int v), v = %d\n",v);
	}
};
void func()
{
	printf("void func()\n");
}
void func(int v)
{
	printf("void func(int v), v = %d\n",v);
}
int main()
{
	func();      //调用全局函数func
	func(10);   //调用全局函数func(int v)

	Test t1;            //Test()
	Test t2(0);         //Test(int v)
	Test  t3 = t2;      // Test t3(t2) Test(const Test& t)
	
	func();       //调用全局函数func
	Test::func(); //调用类中的func() 由于类中的func()是静态成员函数所以可以直接通过类名进行调用

	func(2);    //调用全局函数func(int v)
	t1.func(2); // 类中void func(int v)调用普通的成员函数,只能通过对象来访问
	t1.func();  //类中的static void func()

	return 0;
}

输出结果如下

void func()
void func(int v), v = 10
Test()
Test(int v)
Test(const Test& t)
void func()
static void func()
void func(int v), v = 2
void func(int v), v = 2
static void func()

重载的意义

  • 通过函数名对函数功能进行提示
  • 通过参数列表对函数用法进行提示
  • 扩展系统中已经存在的函数的功能
#include
#include

char* strcpy(char* buf, const char* str, unsigned int n)
{
	return strncpy(buf, str, n);
}

int main()
{
	const char* s = "Hello World!";
	//char buf[16] = {0};
	char buf[8] = {0};    //当需要拷贝的字符串超出了buf的最大容量会报错

	//strcpy(buf, s);  //字符串拷贝函数

	//strncpy(buf, s, sizeof(buf) - 1);  //在拷贝字符串的时候多了一个长度的参数,但是由于记这么多函数比较麻烦,所以我们可以对strpy进行重载

	strcpy(buf , s, sizeof(buf) - 1); //对strpy函数进行了重载
	printf("%s\n", buf);

	return 0;
}

你可能感兴趣的:(C++,C++,重载)