这一篇是对引用的一点补充,内容基本上是来自《C++ primer plus》一书第八章的内容。
前面一篇介绍了引用的一点特点,这里补充一个,将引用用于类对象的时候,有一个体现继承的特征,就是当基类引用可以指向派生类对象,而不需要进行类型强转。这个特征有一个用法是在调用一个接收基类引用作为输入参数的函数的时候,可以将基类对象作为参数,也可以将派生类对象作为参数:
class A
{
public:
virtual void prt0();
virtual void prt1()
{
std::cout << "A1" << std::endl;
}
void prt2()
{
std::cout << "A2" << std::endl;
}
protected:
private:
};
class B :public A
{
public:
void prt0()
{
std::cout << "B0" << std::endl;
}
void prt1()
{
std::cout << "B1" << std::endl;
}
void prt2()
{
std::cout << "B2" << std::endl;
}
};
void suibianlala(const A &a)
{
}
A a;
B b;
suibianlala(a);
suibianlala(b);
何时使用引用、指针或者普通参数呢
使用引用参数的原因:
1、可以修改调用函数中的数据对象,也就是修改原变量;
2、运行速度和效率,这个对于数据对象特别大的时候特别明显,比如在做图像处理的时候,有些高清工业图像的大小可以达到上百M甚至更高,这个时候如果用普通的参数,那可想而知光复制一份临时变量就够呛,然后还在占两份内存。
使用传递的值但不修改的情况:
1、数据特别小,且不需要返回修改原变量,比如传一个int,那用普通参数也可以;
2、传数组,这个应该只能用指针吧,引用应该做不了;
3、传数据对象是很大的结构,如果改原变量,用引用或指针;不改,用const指针或const引用;
4、传类对象,建议用const引用,传递类对象参数的标准方式是按引用传递;
修改传递值的情况:
1、传内置数据类型,使用指针;
2、传数组,只能指针;
3、传结构,引用或指针;
4、传类对象,引用。
这些都是君王底
樱桃艳嘴的小歌童:
有的唱出一颗灿烂的明星,
唱不出的,都拆成两片枯骨。