Truyền đối tượng (object) vào hàm (function) trong C++

Đây là bài 7/19 bài của series môn học Lập trình hướng đối tượng

1. Truyền đối tượng như là tham số cho hàm

Tham số của một hàm (function) có thể là các đối tượng. Khi truyền tham số thì có 2 cách truyền là truyền tham trị và truyền tham chiếu. Các bạn có thể đọc lại ở bài Truyền tham trị và truyền tham chiếu cho hàm trong C++.

Truyền tham trị với đối tượng

Khi truyền tham trị, đối tượng không thay đổi sau khi ra khỏi hàm.

#include <iostream>
using namespace std;

class Circle{
private:
	float r;
public:
	//Hàm khởi tạo có tham số
	Circle(float r){
		this->r = r;
	}
	void setRadius(float r){
		this->r = r;
	}
	float getRadius(){
		return r;
	}
	float calculateArea(){
		return 3.14 * r * r;
	}
};

void setCircle(Circle c){//truyền tham trị
	c.setRadius(100);
}
void main()
{
	Circle c1(3.5);
	setCircle(c1);//gọi hàm truyền tham trị
	cout<<"Radius of Cirle c1 = "<<c1.getRadius();
	cout<<"\nArea of Circle = "<<c1.calculateArea();
	system("pause");
}
Kết quả
Radius of Cirle c1 = 3.5
Area of Circle = 38.465

Hàm setCircle() có cách truyền tham trị với đối tượng. Thuộc tính r của đối tượng c1 không đổi sau khi ra khỏi hàm.

Truyền tham chiếu với đối tượng

Khi truyền tham chiếu, đối tượng thay đổi sau khi ra khỏi hàm.

#include <iostream>
using namespace std;

class Circle{
private:
	float r;
public:
	//Hàm khởi tạo có tham số
	Circle(float r){
		this->r = r;
	}
	void setRadius(float r){
		this->r = r;
	}
	float getRadius(){
		return r;
	}
	float calculateArea(){
		return 3.14 * r * r;
	}
};

void setCircle(Circle &c){//truyền tham chiếu
	c.setRadius(100);
}
void main()
{
	Circle c1(3.5);
	setCircle(c1);//gọi hàm truyền tham chiếu
	cout<<"Radius of Cirle c1 = "<<c1.getRadius();
	cout<<"\nArea of Circle = "<<c1.calculateArea();
	system("pause");
}
Kết quả
Radius of Cirle c1 = 100
Area of Circle = 31400

Hàm setCircle() có cách truyền tham chiếu với đối tượng. Thuộc tính r của đối tượng c1 thay đổi sau khi ra khỏi hàm.

2. Hàm có kiểu trả về là một lớp

Một hàm có thể có kiểu trả về là một lớp. Các hàm này trả về một đối tượng thuộc lớp đó.

class Circle{
private:
	float r;
public:
	//Hàm khởi tạo có tham số
	Circle(float r){
		this->r = r;
	}
	void setRadius(float r){
		this->r = r;
	}
	float getRadius(){
		return r;
	}
	float calculateArea(){
		return 3.14 * r * r;
	}
};

Circle createCircle(){
	Circle c(99);
	return c;
}
void main()
{
	Circle c1 = createCircle();
	cout<<"Radius of Cirle c1 = "<<c1.getRadius();
	cout<<"\nArea of Circle = "<<c1.calculateArea();
	system("pause");
}
Kết quả
Radius of Cirle c1 = 99
Area of Circle = 30775.1

Hàm createCircle() có kiểu trả về là Circle. Hàm này trả về một đối tượng thuộc lớp Circle.

Mời bạn đánh giá bài viết
Bài trước và bài sau trong môn học<< Hàm khởi tạo (constructor) và hàm hủy (destructor) của lớp trong OOPKhai báo và sử dụng con trỏ đối tượng trong C++ >>
Chia sẻ trên mạng xã hội:

Trả lời

Lưu ý:

1) Vui lòng bình luận bằng tiếng Việt có dấu.

2) Khuyến khích sử dụng tên thật và địa chỉ email chính xác.

3) Mọi bình luận trái quy định sẽ bị xóa bỏ.