C++ Tutorial/Function/reference parameter

Материал из C\C++ эксперт
Перейти к: навигация, поиск

Pass by reference by using pointer

#include <iostream>
 
 void swap(int *x, int *y);
 
 int main()
 {
     int x = 5, y = 10;
 
     std::cout << "Main. Before swap, x: " << x << " y: " << y << "\n";
     swap(&x,&y);
     std::cout << "Main. After swap, x: " << x << " y: " << y << "\n";
     return 0;
 }
 
 void swap (int *px, int *py)
 {
     int temp;
 
     std::cout << "Swap. Before swap, *px: " << *px << " *py: " << *py << "\n";
 
     temp = *px;
     *px = *py;
     *py = temp;
 
     std::cout << "Swap. After swap, *px: " << *px << " *py: " << *py << "\n";
 }
Main. Before swap, x: 5 y: 10
Swap. Before swap, *px: 5 *py: 10
Swap. After swap, *px: 10 *py: 5
Main. After swap, x: 10 y: 5

Pass by reference using references

#include <iostream>
 
 void swap(int &x, int &y);
 
 int main()
 {
     int x = 5, y = 10;
 
     std::cout << "Main. Before swap, x: " << x 
                                 << " y: " << y << "\n";
     swap(x,y);
     std::cout << "Main. After swap, x: " << x 
                                << " y: " << y << "\n";
     return 0;
 }
 
 void swap (int &rx, int &ry)
 {
     int temp;
 
     std::cout << "Swap. Before swap, rx: " << rx 
                                 << " ry: " << ry << "\n";
 
     temp = rx;
     rx = ry;
     ry = temp;
 
     std::cout << "Swap. After swap, rx: " << rx 
                                << " ry: " << ry << "\n";
 }
Main. Before swap, x: 5 y: 10
Swap. Before swap, rx: 5 ry: 10
Swap. After swap, rx: 10 ry: 5
Main. After swap, x: 10 y: 5

Passing references to objects

#include <iostream>
 
 class MyClass
 {
 public:
     MyClass();
     MyClass(MyClass&);
     ~MyClass();
 
     int GetAge() const { return itsAge; }
     void SetAge(int age) { itsAge = age; }
 
 private:
     int itsAge;
 };
 
 MyClass::MyClass()
 {
     std::cout << "Simple Cat Constructor...\n";
     itsAge = 1;
 }
 
 MyClass::MyClass(MyClass&)
 {
     std::cout << "Simple Cat Copy Constructor...\n";
 }
 
 MyClass::~MyClass()
 {
     std::cout << "Simple Cat Destructor...\n";
 }
 
 const MyClass & f (const MyClass & obj);
 
 int main()
 {
     MyClass myObject;
     std::cout << "myObject is " << myObject.GetAge() << " years old\n";
 
     int age = 5;
     myObject.SetAge(age);
     std::cout << "myObject is " << myObject.GetAge() << " years old\n";
 
     std::cout << "Calling f...\n";
     f(myObject);
     std::cout << "myObject is " << myObject.GetAge() << " years old\n";
     return 0;
 }
 
 const MyClass & f (const MyClass & obj)
 {
     std::cout << "Function Two. Returning...\n";
     std::cout << "myObject is now " << obj.GetAge()<< " years old \n";
     return obj;
 }
Simple Cat Constructor...
myObject is 1 years old
myObject is 5 years old
Calling f...
Function Two. Returning...
myObject is now 5 years old
myObject is 5 years old
Simple Cat Destructor...

Returning multiple values from a function using references

#include <iostream>
 void f(int, int&, int&);
 
 int main()
 {
     int number = 2, squared, cubed;
     f(number, squared, cubed);
 
     std::cout << "number: " << number << "\n";
     std::cout << "square: " << squared << "\n";
     std::cout << "cubed: "  << cubed   << "\n";
     return 0;
 }
 
 void f(int n, int &rSquared, int &rCubed)
 {
      rSquared = n*n;
      rCubed = n*n*n;
 }
number: 2
square: 4
cubed: 8

Use reference parameters to create the swap() function.

#include <iostream> 
using namespace std; 
 
void swap(int &x, int &y); 
 
int main() 
{ 
  int i, j; 
 
  i = 10; 
  j = 20; 
 
  cout << "Initial values of i and j: "; 
  cout << i << " " << j << "\n"; 
 
  swap(j, i); 
 
  cout << "Swapped values of i and j: "; 
  cout << i << " " << j << "\n"; 
 
  return 0; 
} 
 
void swap(int &x, int &y) 
{ 
  int temp; 
 
  temp = x;  
  x = y;     
  y = temp;  
}
Initial values of i and j: 10 20
Swapped values of i and j: 20 10

Using a reference parameter.

#include <iostream> 
using namespace std; 
 
void f(int &i); // i is a reference parameter 
 
int main() 
{ 
  int val = 1; 
 
  cout << "Old value for val: " << val << "\n"; 
 
  f(val); 
 
  cout << "New value for val: " << val << "\n"; 
 
  return 0; 
} 
 
void f(int &i) 
{ 
  i = 10; 
}
Old value for val: 1
New value for val: 10