2021-01-05C/C++学习00
请注意,本文编写于 693 天前,最后修改于 692 天前,其中某些信息可能已经过时。

目录


1. 函数重载

条件:

  1. 函数名相同
  2. 参数列表不同(数量,类型,顺序)
  3. 相同作用域
  4. 成员函数中的const
c
# include <iostream>
using namespace std;

class CFoo
{
public:
	void Test(int) {}
	//virtual void Test(int) {}	//virtual不能构成重载
	void Test(int)const {}
};

int main()
{
	CFoo foo;
	foo.Test(2);

	const CFoo foo0;
	foo0.Test(2);

	return 0;
}

2. 函数覆盖(多态、虚函数)

派生类中重写的虚函数覆盖虚表中基类的虚函数对应项

  1. 函数名、参数列表、返回值相同(派生类中的函数和基类的函数一样)
  2. 基类函数要有virtual,派生类可有可无
c
# include <iostream>
using namespace std;

class CA
{
public:
	virtual void Test() {}
};

class CB :public CA
{
public:
	virtual void Test() {}
	//virtual int Test() {}	//返回值类型不同
};

int main()
{
	CB b;

	return 0;
}

(重写)overried

c
# include <iostream>
using namespace std;

class CA
{
public:
	virtual void Test() {}
};

class CB :public CA
{
public:
	virtual void Test() override {}	//说明作用,提示此函数是从写的基类的虚函数
};

int main()
{
	CB b;

	return 0;
}

3. 函数隐藏

派生类的名字隐藏基类的名字

  1. 作用域不一样
  2. 函数名一样,参数列表,返回值类型,调用约定不考虑

注意:如果函数声明一样,并且基类有virtual关键字,则函数覆盖

c
# include <iostream>
using namespace std;

class CA
{
public:
	void Test(int) {}
};

class CB :public CA
{
public:
	void Test(char*) {}
};

int main()
{
	CB b;
	b.Test(5);	//函数隐藏
	return 0;
}

本文作者:Na1r

本文链接:

版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!