c学习17--参数为引用类型、返回值为引用类型

类的定义:

class Student{
public:
  Student();//无参的通用构造函数
  Student(const Student &stu);//拷贝构造函数
  ~Student();//析构函数
  int get_age();//获取年龄
  int get_grade();//获取成绩
  void set_age(int _age);//设置年龄
  void set_grade(int _grade);//设置成绩
private:
  int age;
  int grade;
};

Student::Student(){
  age = 0;
  grade = 0;
  printf("调用了无参的通用构造函数\n");
}

Student::Student(const Student &stu){
  age = stu.age;
  grade = stu.grade;
  printf("调用了拷贝构造函数\n");
}

Student::~Student(){
  age = 0;
  grade = 0;
  printf("调用了析构函数\n");
}

int Student::get_age(){
  return age;
}

int Student::get_grade(){
  return grade;
}

void Student::set_age(int _age){
  age = _age;
}

void Student::set_grade(int _grade){
  grade = _grade;
}

1. 1代码,参数不用引用类型

void fun1(Student stu){
  printf("stu的年龄=%d\n",stu.get_age());
  printf("stu的成绩=%d\n",stu.get_grade());
}

void test_11_02(){
  Student stu1;
  fun1(stu1);
}

1.2 执行结果

1.3 分析

可以发现函数fun1(Student stu)采用非引用参数,会调用一次拷贝构造函数。

2.1 代码,采用引用类型参数

void fun2(Student &stu){
  printf("stu的年龄=%d\n",stu.get_age());
  printf("stu的成绩=%d\n",stu.get_grade());
}

void test_11_03(){
  Student stu1;
  fun2(stu1);
}

2.2 执行结果

2.3 分析

很明显采用引用类型参数相比采用非引用类型参数,没有调用拷贝构造,所以会节省资源、效率更高。

3.1 代码 ;返回值 为非引用类型

Student fun3(Student &stu){
  stu.set_age(18);
  stu.set_grade(70);
  printf("stu的年龄=%d\n",stu.get_age());
  printf("stu的成绩=%d\n",stu.get_grade());
  return stu;
}

void test_11_04(){
  Student stu1;
  fun3(stu1);
}

3.2 执行结果

3.3 分析

发现同样调用了,拷贝构造函数

4.1 代码 ;返回值 为引用类型

Student& fun4(Student &stu){
  stu.set_age(19);
  stu.set_grade(80);
  printf("stu的年龄=%d\n",stu.get_age());
  printf("stu的成绩=%d\n",stu.get_grade());
  return stu;
}

void test_11_05(){
  Student stu1;
  fun4(stu1);
}

4.2 执行结果

4.3 分析

可以发现,想比采用 非引用类型返回值,少调用了拷贝构造函数,效率更高,占用资源更少。

参考: 返回引用类型详解

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值