本文共 2087 字,大约阅读时间需要 6 分钟。
#includevoid fun(int &x) { x = 20;}int main() { int x = 10; fun(x); std::cout<<"New value of x is "<
class Student{private: string name; string score;};void printStuDetails(Student stu) { cout<
void printStuDetails(const Student &stu) { cout<
引用主要用于结构体或者类对象的传递,如果是基本类型int, char等,则引用没有什么优势。
3)避免对象分割 如果传递给函数的实参为子类对象,而形参是父类对象,则如果是按值传递,那么这个对象会被分割。 例如下面程序所示:#include#include class Car {public: virtual string getDescription() const { return "This is Car class"; }}; class SUV : public Car {public: virtual string getDescription() const { return "This is SUV class"; }}; void describe(Car car) { //此处会分割子类对象 std::cout< <
输出:
This is Car Class如果是按引用传递,则可以正确的输出 “This is SUV Class”. 见下面修改之后的程序.
#include#include class Car {public: virtual string getDescription() const { return "This is Car class"; }}; class SUV : public Car {public: virtual string getDescription() const { return "This is SUV class"; }}; void describe(const Car &car) { // 这里不会切割子类对象 std::cout< <
4)在函数中实现运行时的多态
可以使用引用或指针传递参数,来实现函数的多态。例如,下面程序中,print()接收一个基类对象的引用,print函数会调用基类的show()函数,如果传递进来的采纳数是基类对象;如果传递的是子类对象,则会调用子类的show()函数。#includeusing namespace std; class base {public: virtual void show() { //注意这里的virtual关键字 cout<<"In base \n"; }}; class derived: public base {public: void show() { cout<<"In derived \n"; }}; //因为传递是的基类base的引用,所以这里可以实现运行时的多态void print(base &b) { b.show();} int main(void) { base b; derived d; print(b); print(d); return 0;}
输出:
In base In derived通常如果是上述的例子2或者3的情形下,推荐使用const引用来进行参数传递。这是为了预防对参数进行了意外修改。
转载地址:http://lmeji.baihongyu.com/