<!DOCTYPE html>
	<html lang="vi" xmlns="http://www.w3.org/1999/xhtml" prefix="og: http://ogp.me/ns#">
	<head>
<title>&#91;C++ Cơ bản&#93; Phần 11&#x3A; Hàm - Chương trình con</title>
<meta name="description" content="&#91;C++ Cơ bản&#93; Phần 11&#x3A; Hàm - Chương trình con - Savefile - Tin Tức - https&#x3A;&#x002F;&#x002F;tinhocdct.xyz&#x002F;savefile&#x002F;hoat-dong-chuyen-mon&#x002F;c-co-ban-phan-11-ham-chuong-trinh-con-104.html">
<meta name="author" content="TỔ TIN HỌC TRƯỜNG THPT ĐỖ CÔNG TƯỜNG">
<meta name="copyright" content="TỔ TIN HỌC TRƯỜNG THPT ĐỖ CÔNG TƯỜNG [webmaster@tinhocdct.xyz]">
<meta name="robots" content="index, archive, follow, noodp">
<meta name="googlebot" content="index,archive,follow,noodp">
<meta name="msnbot" content="all,index,follow">
<meta name="generator" content="NukeViet v4.0">
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<meta property="og:title" content="&#91;C++ Cơ bản&#93; Phần 11&#x3A; Hàm - Chương trình con">
<meta property="og:type" content="website">
<meta property="og:description" content="Savefile - Tin Tức - https&#x3A;&#x002F;&#x002F;tinhocdct.xyz&#x002F;savefile&#x002F;hoat-dong-chuyen-mon&#x002F;c-co-ban-phan-11-ham-chuong-trinh-con-104.html">
<meta property="og:site_name" content="TỔ TIN HỌC TRƯỜNG THPT ĐỖ CÔNG TƯỜNG">
<meta property="og:url" content="https://tinhocdct.xyz/hoat-dong-chuyen-mon/c-co-ban-phan-11-ham-chuong-trinh-con-104.html">
<link rel="shortcut icon" href="https://tinhocdct.xyz/favicon.ico">
<link rel="canonical" href="https://tinhocdct.xyz/hoat-dong-chuyen-mon/c-co-ban-phan-11-ham-chuong-trinh-con-104.html">
<link rel="alternate" href="https://tinhocdct.xyz/rss/" title="Tin Tức" type="application/rss+xml">
<link rel="alternate" href="https://tinhocdct.xyz/rss/tin-tuc/" title="Tin Tức - TIN TỨC" type="application/rss+xml">
<link rel="alternate" href="https://tinhocdct.xyz/rss/thong-cao-bao-chi/" title="Tin Tức - THÔNG BÁO" type="application/rss+xml">
<link rel="alternate" href="https://tinhocdct.xyz/rss/ban-tin-noi-bo/" title="Tin Tức - BẢN TIN NỘI BỘ" type="application/rss+xml">
<link rel="alternate" href="https://tinhocdct.xyz/rss/tin-cong-nghe/" title="Tin Tức - CÔNG NGHỆ - KHOA HỌC" type="application/rss+xml">
<link rel="alternate" href="https://tinhocdct.xyz/rss/thu-thuat/" title="Tin Tức - THỦ THUẬT" type="application/rss+xml">
<link rel="alternate" href="https://tinhocdct.xyz/rss/tien-ich/" title="Tin Tức - TIỆN ÍCH" type="application/rss+xml">
<link rel="alternate" href="https://tinhocdct.xyz/rss/ai/" title="Tin Tức - AI" type="application/rss+xml">
<link rel="alternate" href="https://tinhocdct.xyz/rss/khoa-hoc/" title="Tin Tức - KHOA HỌC" type="application/rss+xml">
<link rel="alternate" href="https://tinhocdct.xyz/rss/hoat-dong-chuyen-mon/" title="Tin Tức - HOẠT ĐỘNG CHUYÊN MÔN" type="application/rss+xml">
<link rel="alternate" href="https://tinhocdct.xyz/rss/hoat-dong-cong-doan/" title="Tin Tức - CÔNG ĐOÀN" type="application/rss+xml">
<link rel="alternate" href="https://tinhocdct.xyz/rss/hoat-dong-doan-the/" title="Tin Tức - ĐOÀN THỂ" type="application/rss+xml">
<link rel="alternate" href="https://tinhocdct.xyz/rss/tuyen-sinh-huong-nghiep/" title="Tin Tức - TUYỂN SINH - HƯỚNG NGHIỆP" type="application/rss+xml">
<link rel="alternate" href="https://tinhocdct.xyz/rss/tuyen-sinh-2025/" title="Tin Tức - TUYỂN SINH 2025" type="application/rss+xml">
<link rel="alternate" href="https://tinhocdct.xyz/rss/lich-cong-tac-tuan/" title="Tin Tức - Lịch công tác tuần" type="application/rss+xml">
<link rel="preload" as="script" href="https://tinhocdct.xyz/assets/js/jquery/jquery.min.js">
<link rel="preload" as="script" href="https://tinhocdct.xyz/assets/js/language/vi.js">
<link rel="preload" as="script" href="https://tinhocdct.xyz/assets/js/global.js">
<link rel="preload" as="script" href="https://tinhocdct.xyz/themes/default/js/news.js">
<link rel="preload" as="script" href="https://tinhocdct.xyz/themes/default/js/main.js">
<link rel="preload" as="script" href="https://pagead2.googlesyndication.com/pagead/js/adsbygoogle.js?client=ca-pub-1816161148536198">
<link rel="preload" as="script" href="https://tinhocdct.xyz/themes/default/js/bootstrap.min.js">
<link rel="StyleSheet" href="https://tinhocdct.xyz/assets/css/font-awesome.min.css">
<link rel="StyleSheet" href="https://tinhocdct.xyz/themes/default/css/bootstrap.non-responsive.css">
<link rel="StyleSheet" href="https://tinhocdct.xyz/themes/default/css/style.css">
<link rel="StyleSheet" href="https://tinhocdct.xyz/themes/default/css/style.non-responsive.css">
<link rel="StyleSheet" href="https://tinhocdct.xyz/themes/default/css/news.css">
<style>
	body{background: #fff;}
</style>
	</head>
	<body>
<div id="print">
	<div id="hd_print">
		<h2 class="pull-left">TỔ TIN HỌC TRƯỜNG THPT ĐỖ CÔNG TƯỜNG</h2>
		<p class="pull-right"><a title="TỔ TIN HỌC TRƯỜNG THPT ĐỖ CÔNG TƯỜNG" href="https://tinhocdct.xyz/">https://tinhocdct.xyz</a></p>
	</div>
	<div class="clear"></div>
	<hr />
	<div id="content">
		<h1>&#91;C++ Cơ bản&#93; Phần 11&#x3A; Hàm - Chương trình con</h1>
		<ul class="list-inline">
			<li>Chủ nhật - 11/04/2021 10:09</li>
			<li class="hidden-print txtrequired"><em class="fa fa-print">&nbsp;</em><a title="In ra" href="javascript:;" onclick="window.print()">In ra</a></li>
			<li class="hidden-print txtrequired"><em class="fa fa-power-off">&nbsp;</em><a title="Đóng cửa sổ này" href="javascript:;" onclick="window.close()">Đóng cửa sổ này</a></li>
		</ul>
		<div class="clear"></div>
		<div id="hometext">
			Có một bài toán được đặt ra: Cho hai giá trị số a và b. Ta cần phải đảo giá trị của chúng - đặt a bằng b và đặt b bằng a.
		</div>
				<div class="imghome">
			<img alt="&#91;C++ Cơ bản&#93; Phần 11&#x3A; Hàm - Chương trình con" src="https://tinhocdct.xyz/uploads/news/2021_04/cpp-co-ban-1-3.jpg" width="460" class="img-thumbnail" />
		</div>
		<div class="clear"></div>
		<div id="bodytext" class="clearfix">
			<p><em>Phần trước:&nbsp;<a href="http://tinhocdct.xyz/hoat-dong-chuyen-mon/c-co-ban-phan-10-toan-tu-tiep-103.html" target="_blank">&#91;C++ Cơ bản&#93; Phần 10: Toán tử (tiếp)</a></em><br  />
Ta không thể đặt thẳng giá trị của chúng như vậy được - nếu như ta viết</p>

<figure>
<pre>
<code data-lang="c++">a = b;
b = a;</code></pre>
</figure>

<p><br  />
<br  />
<br  />
<br  />
thì giá trị của&nbsp;<code>a</code>&nbsp;sẽ bằng giá trị của&nbsp;<code>b</code>&nbsp;lúc ban đầu, và dòng code thứ hai sẽ không có tác dụng gì hết.</p>

<p>Giải pháp là sử dụng một biến tạm thời để lưu trữ giá trị cũ của&nbsp;<code>a</code>, để gán về sau cho&nbsp;<code>b</code>.</p>

<figure>
<pre>
<code data-lang="c++">int temp = a;
a = b;
b = temp;</code></pre>
</figure>

<p><br  />
<br  />
<br  />
<br  />
<br  />
Nhưng nếu ta phải thực hiện công việc tầm 10 lần trong chương trình thì sao? Việc viết ba dòng code này mỗi khi cần đảo giá trị là một điều rất bất hợp lý - code sẽ dài và không trực quan (không có chỗ nào trong 3 dòng code ghi là đây là lệnh để đảo giá trị&nbsp;<code>a</code>&nbsp;và&nbsp;<code>b</code>&nbsp;cả). Hơn nữa, nếu phải sửa một chỗ nào đó trong việc đảo giá trị - ví dụ kiểm tra hai giá trị được đảo có cùng kiểu dữ liệu không chẳng hạn - ta sẽ phải sửa hàng chục lần.</p>

<p>Giải pháp là sử dụng hàm (function, hay còn được gọi là chương trình con).</p>

<h1 id="định-nghĩa-hàm">Định nghĩa hàm</h1>

<p>Hàm là một nhóm lệnh, yêu cầu chương trình phải hoàn thành một công việc nào gì đó.</p>

<p>Hàm có thể được yêu cầu trả lại một giá trị nào đó (ví dụ: hàm tính lũy thừa của một số), hoặc không (hàm trả lại kiểu&nbsp;<code>void</code>&nbsp;- ví dụ như hàm&nbsp;<code>open()</code>&nbsp;của&nbsp;<code>fstream</code>).&nbsp;<code>int main()</code>&nbsp;là một hàm tiêu biểu, trả lại kiểu&nbsp;<code>int</code>&nbsp;là kết quả chạy của chương trình.</p>

<p>Người dùng có thể tự định nghĩa hàm mới trong chương trình của mình.</p>

<h1 id="cách-định-nghĩa-hàm-mới">Cách định nghĩa hàm mới</h1>

<p>Cú pháp để định nghĩa hàm mới là</p>

<pre>
<code>kiểu_dữ_liệu_trả_về tên_của_hàm(các_tham_số_của_hàm)
{
    nội_dung_của_hàm;
}
</code></pre>

<h2 id="kiểu-dữ-liệu-trả-về">Kiểu dữ liệu trả về</h2>

<p>Hàm có thể chỉ thực hiện thao tác lên giá trị mà không trả về kiểu gì cả - khi đó kiểu dữ liệu trả về được đặt là&nbsp;<code>void</code>&nbsp;(không giá trị).</p>

<p>Hàm cũng có thể sử dụng để thực hiện phép tính toán và trả lại kết quả - có thể là các kiểu dữ liệu nguyên thủy như&nbsp;<code>int</code>,&nbsp;<code>double</code>,&nbsp;<code>char</code>,… hay các kiểu dữ liệu người dùng định nghĩa (sẽ được nói tới trong các bài sau).</p>

<h2 id="tên-của-hàm">Tên của hàm</h2>

<p>Quy tắc đặt tên của hàm cũng giống như quy tắc đặt tên biến - trừ trong trường hợp overloading (viết đè hàm). Overloading sẽ được giải thích trong các bài viết sau.</p>

<h2 id="các-tham-số-của-hàm">Các tham số của hàm</h2>

<p>Một hàm có thể được truyền vào một hoặc nhiều biến tham số để hoạt động. Ví dụ: hàm&nbsp;<code>open()</code>&nbsp;của&nbsp;<code>fstream</code>&nbsp;cần có một xâu kí tự là địa chỉ của file cần mở, và một giá trị bitmask&nbsp;<code>mode</code>&nbsp;không bắt buộc.</p>

<p>Các tham số của hàm được định nghĩa theo cú pháp như khai báo biến -&nbsp;<code>kiểu_dữ_liệu tên_biến</code>&nbsp;- và được phân cách nhau bằng dấu phẩy (<code>,</code>).</p>

<p>Các tham số giống như biến local của hàm - chúng chỉ tồn tại bên trong hàm, và sẽ không thể truy cập được từ bên ngoài. Nếu như có biến global trùng tên, thì biến tham số của hàm sẽ được sử dụng trong hàm của nó.</p>

<p>Ta không được phép đặt tên biến local trùng tên biến tham số của hàm.</p>

<p>Hàm không bắt buộc phải có tham số - ví dụ như hàm&nbsp;<code>int main()</code>. Khi đó ta bỏ qua mục này trong ngoặc tròn.</p>

<p>Tham số của hàm có 3 dạng - các dạng của tham số sẽ được nói rõ hơn ở phần sau của bài viết.</p>

<h2 id="nội-dung-của-hàm">Nội dung của hàm</h2>

<p>Nội dung của hàm là những việc ta cần hàm thực hiện, được biểu diễn trong khối lệnh ngoặc nhọn.</p>

<p>Ví dụ: Nội dung của hàm có khả năng in ra giá trị của một số</p>

<figure>
<pre>
<code data-lang="c++">void printNumber(int value)
{
    cout &lt;&lt; value;
}</code></pre>
</figure>

<p><br  />
<br  />
<br  />
<br  />
<br  />
<br  />
Đối với các hàm có giá trị trả về (khác&nbsp;<code>void</code>), ta cần phải sử dụng lệnh&nbsp;<code>return giá_trị;</code>&nbsp;để thông báo kết thúc chương trình và giá trị trả về.</p>

<p>Ví dụ: Nội dung của hàm có khả năng trả về tổng của hai số</p>

<figure>
<pre>
<code data-lang="c++">int tong(int a, int b)
{
    return a + b;
}</code></pre>
</figure>

<p><br  />
<br  />
<br  />
<br  />
<br  />
<br  />
Từ khóa&nbsp;<code>return</code>&nbsp;sẽ thông báo kết thúc hàm ngay lập tức, và trả về giá trị nếu có.</p>

<p>Một hàm được định nghĩa trả về một kiểu giá trị khác&nbsp;<code>void</code>&nbsp;mà kết thúc không có&nbsp;<code>return</code>&nbsp;sẽ khiến chương trình bị lỗi&nbsp;<code>undefined behavior</code>. Các bộ dịch không nhất thiết cần phải thông báo lỗi này (nhưng thường sẽ có cảnh báo), và chương trình vẫn có thể được dịch thành công kể cả khi có lỗi này. Khi đó giá trị trả về có thể là bất cứ giá trị nào. Để tránh sai sót, hãy luôn kết thúc các hàm một cách hợp lệ.</p>

<p>Từ khóa&nbsp;<code>return</code>&nbsp;cũng có thể sử dụng trong hàm kiểu&nbsp;<code>void</code>&nbsp;để kết thúc hàm đó. Trong trường hợp này, ta không cần có phần giá trị trả về.</p>

<p>Ví dụ:</p>

<figure>
<pre>
<code data-lang="c++">void testing()
{
    cout &lt;&lt; &quot;Dong nay se duoc in ra!&quot;;
    return;
    cout &lt;&lt; &quot;Dong nay se khong duoc in ra, vi chuong trinh con ket thuc roi!&quot;;
}</code></pre>
</figure>

<h1 id="sử-dụng-hàm-đã-được-định-nghĩa"><br  />
<br  />
<br  />
<br  />
<br  />
Sử dụng hàm đã được định nghĩa</h1>

<p>Sau khi đã định nghĩa hàm, ta có thể sử dụng hàm bằng cách gọi tên của hàm cùng với giá trị của các tham số của nó (nếu có).</p>

<p>Ví dụ thứ nhất: Chương trình sau đây gọi ra hàm&nbsp;<code>testing</code>&nbsp;vừa rồi ở trong&nbsp;<code>int main()</code>, để kiểm tra tính năng của từ khóa&nbsp;<code>return</code></p>

<figure>
<pre>
<code data-lang="c++">#include &lt;iostream&gt;

using namespace std;

void testing()
{
    cout &lt;&lt; &quot;Dong nay se duoc in ra!&quot;;
    return;
    cout &lt;&lt; &quot;Dong nay se khong duoc in ra, vi chuong trinh con ket thuc roi!&quot;;
}

int main()
{
    testing();
    return 0;
}</code></pre>
</figure>

<p><br  />
<br  />
<br  />
<br  />
<br  />
<br  />
<br  />
<br  />
<br  />
<br  />
<br  />
<br  />
Output</p>

<pre>
<code>Dong nay se duoc in ra!
</code></pre>

<p>Ví dụ thứ hai: Chương trình sau đây sẽ in ra tổng của hai giá trị được tính toán bằng hàm&nbsp;<code>tinhTong()</code></p>

<figure>
<pre>
<code data-lang="c++">#include &lt;iostream&gt;

using namespace std;

int tinhTong(int a, int b)
{
    return a + b;
}

int main()
{
    cout &lt;&lt; tinhTong(1, 2);
    return 0;
}</code></pre>
</figure>

<h1 id="các-kiểu-tham-số-của-hàm"><br  />
<br  />
<br  />
<br  />
<br  />
<br  />
<br  />
<br  />
<br  />
<br  />
<br  />
Các kiểu tham số của hàm</h1>

<p>Ok, giờ ta có thể áp dụng hàm vào chương trình đảo hai số như đầu bài viết đặt ra! Ta chỉ cần viết một hàm&nbsp;<code>daoSo()</code>&nbsp;như sau</p>

<figure>
<pre>
<code data-lang="c++">void daoSo(int a, int b)
{
    int temp = a;
    a = b;
    b = temp;
}</code></pre>
</figure>

<p><br  />
<br  />
<br  />
<br  />
<br  />
<br  />
<br  />
Rồi sau đó gọi hàm này ở dưới khi nào cần đảo số:</p>

<figure>
<pre>
<code data-lang="c++">#include &lt;iostream&gt;

using namespace std;

void daoSo(int a, int b)
{
    int temp = a;
    a = b;
    b = temp;
}

int main()
{
    int a = 10, b = 20;
    daoSo(a, b);
    cout &lt;&lt; &quot;a = &quot; &lt;&lt; a &lt;&lt; &quot;\n&quot;;
    cout &lt;&lt; &quot;b = &quot; &lt;&lt; b;
    return 0;
}</code></pre>
</figure>

<p><br  />
<br  />
<br  />
<br  />
<br  />
<br  />
<br  />
<br  />
<br  />
<br  />
<br  />
<br  />
<br  />
<br  />
<br  />
<br  />
<br  />
<br  />
Output</p>

<pre>
<code>a = 10
b = 20
</code></pre>

<p>Tại sao giá trị của&nbsp;<code>a</code>&nbsp;và&nbsp;<code>b</code>&nbsp;vẫn chưa đảo?</p>

<p>Có 3 dạng tham số của hàm</p>

<h2 id="tham-số-truyền-giá-trị">Tham số truyền giá trị</h2>

<p>Đây là kiểu tham số mặc định của hàm. Khi ta gọi hàm, chương trình sẽ&nbsp;<strong>tạo ra các biến mới, copy giá trị được truyền vào biến</strong>, và&nbsp;<strong>tất cả các thay đổi sẽ chỉ diễn ra trên các biến mới này</strong>. Hàm&nbsp;<code>daoSo()</code>&nbsp;ta vừa viết rơi vào trường hợp này - chỉ có giá trị của hai biến tham số&nbsp;<code>a</code>&nbsp;và&nbsp;<code>b</code>&nbsp;thay đổi,&nbsp;<code>a</code>&nbsp;và&nbsp;<code>b</code>&nbsp;ở bên ngoài vẫn không có gì thay đổi cả.</p>

<h2 id="tham-số-truyền-biến">Tham số truyền biến</h2>

<p>Để khai báo một biến tham số truyền biến, ta sử dụng cú pháp khai báo tham số</p>

<pre>
<code>kiểu_dữ_liệu &amp;tên biến // đặt dấu &amp; ở trước tên biến
</code></pre>

<p>Kiểu tham số này thực hiện mọi thay đổi trực tiếp lên biến mà không thông qua bản copy nào.</p>

<p>Ví dụ, ta viết lại hàm&nbsp;<code>daoSo()</code>&nbsp;như sau</p>

<figure>
<pre>
<code data-lang="c++">void daoSo(int &amp;a, int &amp;b)
{
    int temp = a;
    a = b;
    b = temp;
}</code></pre>
</figure>

<p><br  />
<br  />
<br  />
<br  />
<br  />
<br  />
<br  />
Cho chạy chương trình với đoạn code sửa đổi, ta được output</p>

<pre>
<code>a = 20
b = 10
</code></pre>

<p>Hàm đảo số đã thực hiện thay đổi trực tiếp lên hai biến&nbsp;<code>a</code>&nbsp;và&nbsp;<code>b</code>, và nhờ đó mà giá trị của chúng đã được đảo thành công.</p>

<p>Khi sử dụng hàm có tham số truyền biến, các tham số này bắt buộc phải là một biến - khác với tham số truyền giá trị chỉ cần truyền giá trị. Do đó nếu hàm có dạng</p>

<pre>
<code>int example(int &amp;a…
</code></pre>

<p>Thì tham số&nbsp;<code>a</code>&nbsp;chỉ có thể là một biến kiểu&nbsp;<code>int</code>&nbsp;hoặc tương đương. Trong khi đó nếu hàm có dạng</p>

<pre>
<code>int example(int a…
</code></pre>

<p>Thì tham số&nbsp;<code>a</code>&nbsp;có thể là 1 biến, 1 biểu thức cho ra kiểu&nbsp;<code>int</code>&nbsp;hoặc tương đương, hoăc một giá trị số cụ thể.</p>

<h2 id="tham-số-truyền-con-trỏ">Tham số truyền con trỏ</h2>

<p>Để khai báo một biến tham số truyền con trỏ, ta sử dụng cú pháp khai báo tham số</p>

<pre>
<code>kiểu_dữ_liệu *tên biến // đặt dấu * ở trước tên biến
</code></pre>

<p>Kiểu dữ liệu này sẽ truyền giá trị địa chỉ ô nhớ của biến vào hàm. Kiểu tham số này, cùng với những kiến thức về con trỏ, sẽ được giải thích kĩ hơn ở các bài viết sau.</p>

<h1 id="đệ-quy">Đệ quy</h1>

<p>Giả sử ta định nghĩa giai thừa của một số nguyên&nbsp;<code>x</code>&nbsp;như sau</p>
0!=10!=1x!=(x−1)!∗x&nbsp;∀x&gt;0x!=(x−1)!∗x&nbsp;∀x&gt;0

<p>Đây là một cách định nghĩa kiểu quy nạp - ta định nghĩa một giá trị cơ sở, và các giá trị quy nạp sẽ được định nghĩa từ các giá trị cơ sở trước nó.</p>

<p>Trong chương trình, ta cũng có thể tự gọi một hàm ở ngay bên trong nó - hành động này được gọi là đệ quy. Ví dụ với hàm tính lũy thừa của một số theo định nghĩa trên</p>

<figure>
<pre>
<code data-lang="c++">long long int giaiThua(int x)
{
    return (x == 0? 1 : giaiThua(x - 1) * x);
}</code></pre>
</figure>

<p><br  />
<br  />
<br  />
<br  />
<br  />
<br  />
Dòng lệnh trên sử dụng toán tử điều kiện - nếu như&nbsp;<code>x</code>&nbsp;bằng 0, giai thừa sẽ trả lại 1. Nếu&nbsp;<code>x</code>&nbsp;khác 0, giai thừa sẽ bằng giai thừa của&nbsp;<code>x - 1</code>&nbsp;nhân với&nbsp;<code>x</code>.</p>

<p>Chú ý rằng hành động đệ quy có thể sinh ra lặp vô hạn. Ví dụ như hàm sau</p>

<figure>
<pre>
<code data-lang="c++">int infinityLoop(int x)
{
    return infinityLoop(x - 1) * x;
}</code></pre>
</figure>

<p><br  />
<br  />
<br  />
<br  />
<br  />
<br  />
<br  />
Hàm kia sẽ liên tục lấy hàm&nbsp;<code>infinityLoop</code>&nbsp;của&nbsp;<code>x - 1</code>&nbsp;nhân với&nbsp;<code>x</code>, mà không hề có điểm dừng. Nếu gọi hàm này, chương trình hoặc sẽ không thể chạy được tiếp (do hàm này không bao giờ kết thúc), hoặc sẽ sinh lỗi tràn bộ nhớ (do phải tạo ra vô hạn biến tham số x cho mỗi lần gọi hàm).</p>

<h1 id="giá-trị-mặc-định-cho-tham-số">Giá trị mặc định cho tham số</h1>

<p>Như hàm open của&nbsp;<code>fstream</code>&nbsp;có giá trị mặc định cho&nbsp;<code>mode</code>, ta cũng có thể đặt giá trị mặc định cho các tham số của hàm.</p>

<pre>
<code>kiểu_dữ_liệu tên_biến = giá_trị_mặc định
</code></pre>

<p>Giá trị mặc định sẽ được sử dụng khi không có giá trị nào được truyền vào tham số tương ứng.</p>

<p>Ví dụ: Chương trình sau sẽ gọi ra hàm tính tổng hai số mà không truyền hai số vào. Vì đã có giá trị mặc định từ trước, nên phép toán vẫn được thực hiện với hai giá trị mặc định.</p>

<figure>
<pre>
<code data-lang="c++">#include &lt;iostream&gt;

using namespace std;

int tinhTong(int a = 10, int b = 20)
{
    return a + b;
}

int main()
{
    cout &lt;&lt; tinhTong();
    return 0;
}</code></pre>
</figure>

<p><br  />
<br  />
<br  />
<br  />
<br  />
<br  />
<br  />
<br  />
<br  />
<br  />
<br  />
<br  />
<br  />
<br  />
<br  />
Output</p>

<pre>
<code>30
</code></pre>

<p><em>Phần sau:&nbsp;<a href="http://tinhocdct.xyz/hoat-dong-chuyen-mon/c-co-ban-phan-12-cau-lenh-dieu-kien-105.html" target="_blank">&#91;C++ Cơ bản&#93; Phần 12: Câu lệnh điều kiện</a></em></p>
		</div>
				<div id="author">
						<p>
				<strong>Tác giả bài viết:</strong>
				Thanh Sơn
			</p>
						<p>
				<strong>Nguồn tin:</strong>
				cowboycoder.tech
			</p>
		</div>
	</div>
	<div id="footer" class="clearfix">
		<div id="url">
			<strong>URL của bản tin này: </strong><a href="https://tinhocdct.xyz/hoat-dong-chuyen-mon/c-co-ban-phan-11-ham-chuong-trinh-con-104.html" title="&#91;C++ Cơ bản&#93; Phần 11&#x3A; Hàm - Chương trình con">https://tinhocdct.xyz/hoat-dong-chuyen-mon/c-co-ban-phan-11-ham-chuong-trinh-con-104.html</a>

		</div>
		<div class="clear"></div>
		<div class="copyright">
			&copy; TỔ TIN HỌC TRƯỜNG THPT ĐỖ CÔNG TƯỜNG
		</div>
		<div id="contact">
			<a href="mailto:webmaster@tinhocdct.xyz">webmaster@tinhocdct.xyz</a>
		</div>
	</div>
</div>
        <div id="timeoutsess" class="chromeframe">
            Bạn đã không sử dụng Site, <a onclick="timeoutsesscancel();" href="https://tinhocdct.xyz/#">Bấm vào đây để duy trì trạng thái đăng nhập</a>. Thời gian chờ: <span id="secField"> 60 </span> giây
        </div>
        <div id="openidResult" class="nv-alert" style="display:none"></div>
        <div id="openidBt" data-result="" data-redirect=""></div>
<script src="https://tinhocdct.xyz/assets/js/jquery/jquery.min.js"></script>
<script>var nv_base_siteurl="/",nv_lang_data="vi",nv_lang_interface="vi",nv_name_variable="nv",nv_fc_variable="op",nv_lang_variable="language",nv_module_name="news",nv_func_name="savefile",nv_is_user=0, nv_my_ofs=-4,nv_my_abbr="EDT",nv_cookie_prefix="nv4",nv_check_pass_mstime=1738000,nv_area_admin=0,nv_safemode=0,theme_responsive=0,nv_is_recaptcha=0;</script>
<script src="https://tinhocdct.xyz/assets/js/language/vi.js"></script>
<script src="https://tinhocdct.xyz/assets/js/global.js"></script>
<script src="https://tinhocdct.xyz/themes/default/js/news.js"></script>
<script src="https://tinhocdct.xyz/themes/default/js/main.js"></script>
<script async src="https://pagead2.googlesyndication.com/pagead/js/adsbygoogle.js?client=ca-pub-1816161148536198"
     crossorigin="anonymous"></script>
<script src="https://tinhocdct.xyz/themes/default/js/bootstrap.min.js"></script>
</body>
</html>