Example:
void f(int i)
{
printf("i = %d\n\n", i);
}
void f(double f)
{
printf("f = %f\n\n", f);
}
|
Compile this program with "cc overload01.c"
Result:
line 10: identifier redefined: f current : function(double) returning void previous: function(int) returning void : "overload01.c", line 4 |
Compile this program with "CC overload02.C" and run it...
void f(float f)
{
cout << "float f = " << f << endl << endl;
}
void f(double d)
{
cout << "double d = " << d << endl << endl;
}
|
Example:
int i; double f; f(i); // will invoke f(int) f(f); // will invoke f(double) f(3); // will invoke f(int) f(3.0); // will invoke f(double) f((float) 3.0); // will invoke f(float) |
class Matrix3
{
public:
float A[3][3];
};
class Vector3
{
public:
float x[3];
};
|
// ============================ Matrix-matrix multiply
Matrix3 operator*(Matrix3 & M1, Matrix3 & M2)
{
Matrix3 r;
int i, j, k;
for (i = 0; i < 3; i=i+1)
for (j = 0; j < 3; j=j+1)
r.A[i][j] = 0;
for (i = 0; i < 3; i=i+1)
for (j = 0; j < 3; j=j+1)
for (k = 0; k < 3; k=k+1)
r.A[i][j] = r.A[i][j] + M1.A[i][k]*M2.A[k][j];
return r;
}
// ============================ Matrix-vector multiply
Vector3 operator*(Matrix3 &M, Vector3 &v)
{
Vector3 z;
int i, j;
for (i = 0; i < 3; i=i+1)
z.x[i] = 0;
for (i = 0; i < 3; i=i+1)
for (j = 0; j < 3; j=j+1)
z.x[i] = z.x[i] + M.A[i][j]*v.x[j];
return z;
}
|
int main(int argc, char *argv[])
{
Matrix3 M1, M2, M3;
Vector3 v1, v2;
M3 = M1 * M2; // Selects Matrix-matrix multiply
// because operator*(Matrix3,Matrix3)
v2 = M2 * v1; // Select Matrix-vector multiply
// because operator*(Matrix3,Vector3)
}
|