c++自定义类的对象 做函数参数为什么一定要用 引用传值?

c++自定义类的对象 做函数参数为什么一定要用 引用传值?,第1张

不是一定要用引用。

由于对象一般都含有较多的数据成员,当其作为函数参数传递时,传递对象值的耗时要比传递对象地址耗时多,所以一般采用传递地址的方式。

使用指针也能传递地址,但C++引入了引用的概念之后,使用引用要比使用指针的可读性好些。

有时,一些函数(包括拷贝构造函数)参数要求用(不是必须用)常引用,目的是为了避免函数体中无意地修改指针所指对象的值。

可以说是对,在C++中,数组并不像java那样是对象,C++的数组就是一段内存,值传递,其实是指针传递

当然,C++那么牛B的,肯定支持数组的引用传递了

值传递:

void fun(int arr[]);

实际上传递的是数组的首地址指针;

引用:

void fun(int (&arr)[SIZE]);

注意,方括号中的SIZE必须要写,而且在调用的时候必须用这个SIZE的数组,否则会出错;

例如:

void fun(int (&arr)[5]);

在调用的时候传入的数组必须是int型的大小为5的数组:

int nArr[5];

fun(nArr);

否则会错;

更牛B的用法:

刚才说了,C++是很牛B的,那么牛B的,难道定义的函数只能处理固定大小的数组?当然不是

这样定义,可以处理任意大小的数组:

template < int N >

void fun(int (&arr)[N]);

这样,任意大小的int型数组都可以传递进来了

这个方法叫“非类型模版参数”

数组作为参数是按地址传递的 数组名就是数组的首地址。因此在数组名作函数参数时所进行的传送只是地址的传送, 也就是说把实参数组的首地址赋予形参数组名。形参数组名取得该首地址之后,也就等于有了实在的数组。实际上是形参数组和实参数组为

void set(vector<student>&); //这个是对象吧?在函数中形式参数是可以省略

变量名的,

比如 void change(int &,in &);

#include <iostreamh>

#include <string>

using namespace std;

#define STUDENTNUM 5

class Student

{

public:

Student() {}

Student(double score, unsigned int num, string name);

double GetScore();

unsigned int GetNum();

private:

double m_dScore;

unsigned int m_iNum;

string m_strName;

};

Student::Student(double score, unsigned int num, string name)

{

m_dScore = score;

m_iNum = num;

m_strName = name;

}

double Student::GetScore()

{

return m_dScore;

}

unsigned int Student::GetNum()

{

return m_iNum;

}

unsigned int GetMaxScore(Student st)

{

int MaxScoreIndex = 0;

for(int i = 0; i < STUDENTNUM - 1; i++)

{

int Max = ((st + i)->GetScore()) > ((st + i + 1)->GetScore()) i : (i + 1);

MaxScoreIndex = ((st + MaxScoreIndex)->GetScore()) > ((st + Max)->GetScore()) MaxScoreIndex : Max;

}

return (st + MaxScoreIndex)->GetNum();

}

void main()

{

Student StuInfo[5];

StuInfo[0] = Student(100, 1, "zhangsan");

StuInfo[1] = Student(90, 2, "lisi");

StuInfo[2] = Student(80, 3, "lucy");

StuInfo[3] = Student(70, 4, "hanmeimei");

StuInfo[4] = Student(60, 5, "joey");

int Num = GetMaxScore(StuInfo);

cout<<Num<<endl;

}

粗略写了下,希望能看懂。。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/12163324.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-21
下一篇 2023-05-21

发表评论

登录后才能评论

评论列表(0条)

保存