C++ 函数中传递和返回对象的完整指南
C++ 函数中传递和返回对象的完整指南
本教程通过实例和最佳实践,详细讲解如何在 C++ 函数中传递对象以及从函数返回对象。
示例 1:向函数传递对象
// C++ 程序:计算两名学生的平均分
#include <iostream>
using namespace std;
class Student {
public:
double marks; // 成绩
// 构造函数初始化成绩
Student(double m) : marks(m) {}
};
// 函数接受两个 Student 对象作为参数(按值传递)
void calculateAverage(Student s1, Student s2) {
double average = (s1.marks + s2.marks) / 2.0;
cout << "Average Marks = " << average << endl;
}
int main() {
Student student1(88.0), student2(56.0);
calculateAverage(student1, student2);
return 0;
}
输出
Average Marks = 72
此处我们将两个 Student 对象 student1 和 student2 按值传递给 calculateAverage()。按值传递会创建对象副本;如果对象较大,建议改用引用传递以避免不必要的拷贝开销。

示例 2:从函数返回对象
#include <iostream>
using namespace std;
class Student {
public:
double marks1, marks2;
};
// 返回 Student 对象的函数
Student createStudent() {
Student student;
student.marks1 = 96.5;
student.marks2 = 75.0;
cout << "Marks 1 = " << student.marks1 << endl;
cout << "Marks 2 = " << student.marks2 << endl;
return student; // 编译器会应用 NRVO 优化拷贝
}
int main() {
Student student1;
student1 = createStudent();
return 0;
}
输出
Marks 1 = 96.5 Marks 2 = 75

函数 createStudent() 构造一个 Student 实例,打印其成员值并返回。在 main() 中,返回的对象被赋值给 student1。现代编译器会采用返回值优化(RVO/NRVO)来消除不必要的拷贝,提升性能。
最佳实践提示
- 对于大型对象,优先使用 const 引用 作为函数参数(
const Student&),避免拷贝。 - 返回对象时,直接返回局部对象即可,依赖编译器的 RVO/NRVO 优化;无需手动动态分配。
- 若必须传递所有权,可考虑返回
std::unique_ptr或std::shared_ptr(C++11 及以上)。
C语言
- 筑牢供应链防线:应对网络犯罪、自然灾害等风险的策略
- 3D打印三大核心阶段详解
- C# 类与对象:面向对象编程的基石
- C++类与对象:面向对象编程实战指南
- C++ 动态内存管理:new 与 delete 专家级实战指南
- C++ 三种继承方式深度解析:public、protected 与 private
- C++ 友元函数与友元类:突破访问控制的利器
- C语言函数参数传递:地址与指针实战指南
- C++ 函数详解:从声明到调用的实战指南
- C++日期时间完全指南:ctime库、tm结构体与格式化输出
- C++重载机制深度解析:函数重载与运算符重载全攻略
- C++文件I/O完全指南:fstream读写、打开模式、定位指针与完整实例