C++:类的使用【重载函数】

一般来说,有效的函数是由:数据类型+自定义函数名(有参或无参)构成。
个人猜想:按照道理来说,函数名就应该不能一模一样的。可试想下:假若一段代码,不重复的函数体多如牛毛,而多如牛毛的函数名交织在一起,那将导致想要准确地查找函数名时,既浪费大量的时间、精力,还会加大了编程的阻力,又可能会给本来预期可以完成的项目,导致完不成的结果。因此从C语言到C++,大牛专门设计的知识体系,那就是重载函数。不仅大大提升了编程效果,还能使编程变得高效可行…
既然已知重载函数可行,那么就来看看函数的重载是个怎么回事?
函数的重载构成条件:函数的参数类型、参数个数不同,才能构成重载函数。
而事实上,从前面所讲类的使用篇章中,就已经出现了,那就是无参和带参的构造函数。
当然,从文字上理解,或许会感到疑惑重重,小编以代码初步实现:
1、首先创建一个类Student,生成Student.h和Student.cpp文件。
2、Student.h:

#pragma once
#ifndef _STUDENT_H_
#define _STUDENT_H_

#include <iostream>
using namespace std;
class Student
{
	//公共的行为或者属性(变量)
public:
	//自定义无参构造函数
	Student();
	//自定义带参构造函数1
	Student(int StuId,string name);
	//自定义带参构造函数2
	Student(int StuId, string name, int age);

	
	//受保护的行为或者属性(变量)
protected:
	//私有的行为胡总和属性(变量)
private:
	int			m_StuId;		//学号
	string		m_Name;			//姓名
	int			m_Age;			//年龄
};
#endif // !_STUDENT_H_

3、Student.cpp:

#include "Student.h"
//无参构造函数具体实现
Student::Student()
{
}
//带参构造函数1具体实现
Student::Student(int StuId, string name)
{
}
//带参构造函数2具体实现
Student::Student(int StuId, string name, int age)
{
}

因为,没有具体实现函数体,所以哪怕初始化对象,并带入参数,也没有任何效果,只是让大家先体会下。
4、类的使用.cpp:

#include <string>		//包含string的头文件
#include <iostream>		//C++标准库,输入、输出
using namespace std;	//使用std命名空间[所有的std::]
#include "Father.h"		//自定义class 类头文件
#include "Student.h"
int main()
{
	int StudId	= 1;
	string name = "名字";
	int	StudAge = 30;

	//第一种初始化方式,不作任何的实现
	Student student1;
	Student* student2 = new Student;

	//第二种初始化方式,不作任何的实现
	Student* student3 = &student1;
	Student* student4 = student3;

	//第三种初始化方式
	Student student5  = Student(StudId, name);

	Student student6(StudId,name);
	Student student7(StudId, name,StudAge);

	//变相的赋值方式,可作为第二种初始化方式对比理解
	int* pId         = &StudId;
	int* pAge        = &StudAge;

	//第四种初始化方式
	Student* student8 = new Student(*pId,name);
	Student* student9 = new Student(*pId, name,*pAge);
	
	system("pause");			//暂缓功能,能让界面停留的功能
	return 0;
}

运行的结果是可行的,这就说明:初始化对象的方式有很多,当然是按照您在编译中,需要这么初始化时再用。按照初始化对象的机制,只要用完后不需要再释放时,即可。
在这里,第一种、第四种初始化对象的方式都是可行的,也间接的表明了,无参、带参构造函数函数名相同,由于参数不同,都可以初始化对象。
下面,我们再看看普通函数的重载实现:
1、首先看看编译器无法识别的错误重载函数。

	//普通函数的重载,ERROR
	void Print() {}
	int Print() { return 0; }

	void Print(int id, string name, int age=6) {}
	void Print(int id, string name, int age) {}

2、正确的函数重载。

	//普通函数的重载
	//无参函数
	void Print() {}
	//带一参同名函数
	void Print(int id) {}
	//带二参同名函数
	void Print(int id, string name) {}
	//带三参同名函数
	void Print(int id, string name, int age) {}
	//行参不同的同名函数
	int Print(int id,int age){return 0;};

当然了,简单的认识了下重载函数的构成条件,可做的事就太多。而类的使用篇章主要分解构成,下面就开始逐步深入三特性:继承、封装、多态。
条条代码铸前程,行行字母显乾坤。你的路上不孤单,一路陪行。
博客园:JhonnyK(#ifndef, #define, #endif三者的作用)

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值