summaryrefslogtreecommitdiff
path: root/reference/CPLUSPLUS/CONCEPT/funcoverload.html
blob: a245e322b3be253f24300da05444a0e9f5af5233 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
<html>
<head>
<title>Function Overloading.</title>
</head>
<body bgcolor="#dddddd">
<font color=brown>
<hr>
<center><h1>Function Overloading.</h1></center>
<hr>
<p>
Overloading is a technique that allows you to give a several
functions with the same name but different parameter lists.
<p>
Consider the following program.
<p>
<center>
<table border=1 width="80%" bgcolor="ivory">
<tr>
<td>
<pre>

    #include &lt;iostream.h&gt;
    
    void Add(int Left,   int Right);

    main ()
    {
        Add(5, 9);              // Integer Add.
        Add(3.2, 7.1);          // Floating point Add.
    }
 
    // Integer version of Add.
       
    void Add(int Left, int Right)
    {
        cout << Left << " + " << Right << " = " << Left+Right << endl;
    }
</pre>
</td>
</tr>
</table>
</center> 
<p>
The program contains the <b>Add</b> function that adds integers.
But the main calls it twice, once passing integers and the second
time passing floating point numbers. The program will compile and run
but you will get incorrect results because the floats will be 
<a href=../../C/CONCEPT/cast.html> cast</a> to integers. 
<p>
The second
program offers a solution by <b>overloading</b> the <b>Add</b> function.

<p>
<center>
<table border=1 width="80%" bgcolor="ivory">
<tr>
<td>
<pre>

    #include &lt;iostream.h&gt;
    
    void Add(int    Left, int    Right);
    <b>void Add(double Left, double Right);</b>

    main ()
    {
        Add(5, 9);             // Integer Add.        
        Add(3.2, 7.1);         // Floating point Add. 
    }
 
    // Integer version of Add.
       
    void Add(int Left, int Right)
    {
        cout << Left << " + " << Right << " = " << Left+Right << endl;
    }
 <b>
    // float version of Add.
    
    void Add(double Left, double Right)
    {
        cout << Left << " + " << Right << " = " << Left+Right << endl;
    }
</b>
</pre>
</td>
</tr>
</table>                        
</center> 

The compiler can now look at the call list and match it with
a function with the correct parameter list and the floating 
point addition is performed correctly.

<p>

Please note that the returned argument is not used when matching 
overloaded functions.


<hr>
<h2>Examples:</h2>
<img src="../../GRAPHICS/computer.gif" alt="o">
<a href="../EXAMPLES/overload.cc">Example program.</a>
<p>

<hr>
<h2>See Also:</h2>

<img src="../../GRAPHICS/whiteball.gif" alt="o">
<a href="fundefault.html">Default Parameter Values.</a>.


</font>
<hr>
<font color=black>
<h2>C References</h2>
<p>
<img src="../../GRAPHICS/whiteball.gif" alt="o">
<a href="../../C/SYNTAX/functions.html">Function Basics</a>.

</font>

<hr>
<p>
<center>
<table border=2 width="80%" bgcolor="ivory">
<tr align=center>
<td width="25%">
<a href="../cref.html">Top</a>
</td><td width="25%">
<a href="../../C/master_index.html">Master Index</a>
</td><td width="25%">
<a href="../SYNTAX/keywords.html">Keywords</a>
</td><td width="25%">
<a href="../../C/FUNCTIONS/funcref.htm">Functions</a>
</td>
</tr>
</table>
</center>
<p>
<hr>
<font color=brown>
<address>Martin Leslie 
<script language="JavaScript">
<!--  //
document.write(document.lastModified);
// -->
</script>
</address><p>
</font>
</body>
</html>