C++数据结构与算法

C++数据结构算法

一、提出问题
1、什么是函数重载?
答:具有不同形参列表的同名函数称为函数重载,编译系统根据实参的类型来选择函数,这个过程称为重载解析。

2、什么是运算符重载?
答:在实际应用中,我们常常要扩展关系运算符对象的类型,比如比较两个结构体中某一变量的值,扩展的逻辑为:先将运算符看作是函数表达式,其函数名为operator加关系符<;通过运算符函数的定义实现运算符对象的类型扩展,称为运算符重载。

3、什么是浅、深复制?
答:结构对象通过赋值运算符只能完成浅层对象的复制(浅复制),深层对象的复制则称为深复制。

4、什么是指向const型的指针和const型的指针?
答:指针与两个对象有关:一个是它本身,用来存储一个对象的地址;另一个是它所指向的对象,地址就是这个对象的地址。如果指针指向的对象是不允许修改的(const型),那么就称为指向const型的指针,如果指针本身是const型的,则称为const型指针。const型指针在初始化完成后,就不能再指向别的对象。

6、字面量为什么不能是引用传递中的实参?为什么可以是const型引用传递中的实参?
答:引用实质上是指向被引用对象的指针,所以引用传递的实质是地址传递,字面量因为不能传址,所以不能是引用传递的实参,即不能是被引用的对象。假设函数是形参为抽象类型Type的值传递:

void PushBack(SeqList* l, Type item);

因为抽象类型Type可以实例化SeqList类型,所以要改为引用传递,以实现深复制。因为原来是值传递,而值传递不会改变实参的值,所以要改为引用const型的引用传递:

void PushBack(SeqList* l, const Type& item);

抽象类型Type还可以实例化为整型。因为原来是值传递,而值传递的实参可以是字面量,所以const型引用传递的实参可以是字面量。

7、什么是默认参数和默认函数?
答:默认参数是指函数声明中带有默认值的形参。调用函数可以省略相应的实参,编译器将用默认值代替。所有形参都是默认参数的函数称为默认函数。

二、相关代码片段实例
1、 运算符重载:

struct student
{
	int id;
	int score;
};
/*想要比较两个student的成绩大小*/
bool operator == (student x, student y)
{
	return x.score == y.score;
}
bool operator >(student x, student y)
{
	return x.score > y.score;
}

int main()
{
	student s1 = { 2172, 90 };
	student s2 = { 0007, 90 };
	cout << (s1 == s2) << endl;
}

结果将返回一个布尔值,对于未重载的运算符,结果将出错;
int main()

{
	student s1 = { 2172, 90 };
	student s2 = { 0007, 90 };
	bool a = s1.score == s2.score;
	cout << a << endl;
}

其实比较结构体变量只需要 结构体.变量名 就可以了,不重载运算符也行。
2、函数重载

void pfun(int n)
{
	cout << n << "  use int pfun" << endl;
}
void pfun(char n)
{
	cout << n <<"  use char pfun"<< endl;
}
void pfun(string n)
{
	cout << n <<"  use string pfun" << endl;
}

int main()
{
	pfun('1');
	pfun(10);
	pfun("hello world");
	
}
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值