By & large, C++ functions look like Java functions:
int sum(int a, int b) { return a+b; } int main() { cout << sum(2, 40) << '\n'; }
42
Functions can have default trailing arguments:
int sum(int a, int b = 1) { return a+b; } int main() { cout << sum(2, 40) << '\n' << sum(8) << '\n'; }
42 9
All default arguments must be piled up at the end:
int sum(int a = 123, int b = 456) { return a+b; } int main() { cout << sum(2, 40) << '\n' << sum(8) << '\n' << sum() << '\n'; }
42 464 579
Like Java, C++ can have multiple versions of the same function that take different arguments:
int sum(int a, int b) { return a+b; } int sum(int a) { return a+456; } int sum() { return 123+456; } int main() { cout << sum(2, 40) << '\n' << sum(8) << '\n' << sum() << '\n'; }
42 464 579
The types don’t have to be the same, either:
int sum(int a, int b) { return a+b; } double sum(int a) { return a+4.5; } string sum(double) { return "I can’t deal with double"; } const char *sum() { return "You are a bonehead"; } int main() { cout << sum(2, 40) << '\n' << sum(8) << '\n' << sum(123.456) << '\n' << sum() << '\n'; }
42 12.5 I can’t deal with double You are a bonehead
sum
in the executable file?
sum
is sum
, right?
sum
.
sum-that-takes-an-int-argument
.
int foo() { return 1; } double foo() { return 2.0; } int main() { return 0; }
c.cc:2: error: ambiguating new declaration of 'double foo()'
$ cat ~cs253/Examples/overload.cc int sum(int a, int b) { return a+b; } double sum(int a) { return a+4.5; } const char *sum() { return "You are a bonehead"; } bool sum(double, int, short) { return false; } $ g++ -c ~cs253/Examples/overload.cc $ nm --numeric-sort overload.o 0000000000000000 T _Z3sumii 0000000000000014 T _Z3sumi 000000000000002e T _Z3sumv 0000000000000039 T _Z3sumdis $ nm --numeric-sort --demangle overload.o 0000000000000000 T sum(int, int) 0000000000000014 T sum(int) 000000000000002e T sum() 0000000000000039 T sum(double, int, short)