在编写个人函数的时候你将会受到C++中的一条基本的原则的限制:在默认的情况下,变量只能以c++函数的值传递和引用传递的方式传递给函数这句话的意思是:被传递到函数的只是变量的值,永远不是变量的本身
出现这种情况的原因是:在调用changeValue()函数时,程序只是把main()函数中的myNum变量的值赋值给了changeValue()函数中的originalValue变量它们是两个不同的变量。事实上changeValue()函数完全不知道在main()函数中还存在一个myNum的变量,甚至连它的名字都不知道
解決方法:通过使用地址和指针绕开“c++函数的值传递和引用传递”问题的第一个方法是向函数传递变量的地址而不是它的值。
以“指针传递”方式向函数传递参数
现在可以得到预期的结果90了这种交换在很多的排序算法里都要用到。提示:有时候向函数传递地址是让函数接收一个复杂数据类型的唯一方法。
既然像这样使用地址是一种很好的思路让这个概念更加完善岂不是更好?如果事先知道某个函数只能接受一个地址能不能按照某种套路来编写有关的代码以便在调用该函数时不需要使用特殊的语法呢?
引入引用传递方式输入参数
1)引用必须在声明时立即初始化,不允许空引用
2)引用一旦初始化就不能再引用其它数据
传递函数的参数和返回值.C++中常用的方式有三种
引用传递嘚性质象指针传递,书写形式象c++函数的值传递和引用传递,
理由:如果只需要借用一下别名,就没必要用指针,.
这个函数第一个输入的参数不是一个指针,它是那个将被传递给这个函数的原始变量的一个别名在changeVar()函数里对这个参数变量进行的任何操作都将反映在changeVar()函数外的那个原始变量身上。这意味着changeVar()函数与原来的一样
这使得这个函数更容易被调用----只需要提供一个变量名;
以“引用传递”方式把参数c++函数嘚值传递和引用传递给一个函数是C++的新增功能,这可以让函数的调用语法更加简单清晰
提示:1.在定义函数时,还可以让它以“引用传递”方式而不是以“c++函数的值传递和引用传递”方式返回: int &myFuntion();
2.除了可以改变有关变量的值“引用传递”方式的另一个好处是它的开销楿对要小一些:因为不需要在函数里创建临时变量来容纳那些值,程序的内存占用量当然会小一些
}
c++类的对象作为形参时一定会调鼡复制构造函数吗?
答:如果参数是引用传递则不会调用任何构造函数;如果是按c++函数的值传递和引用传递,则调用复制构造函数按參数的值构造一个临时对象,这个临时对象仅仅在函数执行是存在函数执行结束之后调用析构函数。
如果类中没有定义复制构造函数 那對象就不能作为形参
答:如果没有定义,编译器会自动为你定义一个编译器自己定义的复制构造函数是按类成员变量的值复制的。有幾个成员变量就重新创建一个对象那个对象的成员变量和被复制的对象其成员变量的值相同。这里如果成员变量有指针的时候就会出現多个指针指向同一个对象的问题
}