Download presentation
Presentation is loading. Please wait.
1
Computer Science 1620 Default Parameter Values
2
Default Parameters If a projectile is launched vertically with velocity v 0, the maximum height it will reach is given by: g is the downward gravitational acceleration on Earth, g is roughly 9.81 m/s 2 at sea level write a function that takes an initial velocity, and returns the height of the projectile v0v0 g
3
#include using namespace std; double height(double v0) { const double G = 9.81; return v0 * v0 / (2 * G); } int main() { cout << "v0 = 5 m/s, height = " << height(5.0) << "m" << endl; cout << "v0 = 10 m/s, height = " << height(10.0) << "m" << endl; cout << "v0 = 15 m/s, height = " << height(15.0) << "m" << endl; cout << "v0 = 20 m/s, height = " << height(20.0) << "m" << endl; cout << "v0 = 25 m/s, height = " << height(25.0) << "m" << endl; return 0; }
5
Suppose your boss wants this function to work on the moon as well gravitational acceleration on moon = 1.62 m/s
6
#include using namespace std; double height(double v0) { const double G = 1.62; return v0 * v0 / (2 * G); } int main() { cout << "v0 = 5 m/s, height = " << height(5.0) << "m" << endl; cout << "v0 = 10 m/s, height = " << height(10.0) << "m" << endl; cout << "v0 = 15 m/s, height = " << height(15.0) << "m" << endl; cout << "v0 = 20 m/s, height = " << height(20.0) << "m" << endl; cout << "v0 = 25 m/s, height = " << height(25.0) << "m" << endl; return 0; }
8
Suppose your boss wants to be able to calculate for both moon and Earth in same program Solution 1: write two separate functions
9
#include using namespace std; double earth_height(double v0) { const double G = 9.81; return v0 * v0 / (2 * G); } double moon_height(double v0) { const double G = 1.62; return v0 * v0 / (2 * G); } int main() { cout << "v0 = 5 m/s, earth = " << earth_height(5.0) << "m" << endl; cout << "v0 = 5 m/s, moon = " << moon_height(5.0) << "m" << endl; cout << "v0 = 28 m/s, earth = " << earth_height(28.0) << "m" << endl; cout << "v0 = 28 m/s, moon = " << moon_height(28.0) << "m" << endl; return 0; }
11
This works, but … repeated code suppose your boss wants it to work for any planet in the solar system, plus all of their moons way too many functions Solution 2: send the gravitational constant as a second parameter
12
#include using namespace std; const double EARTH_G = 9.81; const double MOON_G = 1.62; const double MARS_G = 3.69; double height(double v0, double G) { return v0 * v0 / (2 * G); } int main() { cout << "v0 = 28 m/s, earth = " << height(28.0, EARTH_G) << "m" << endl; cout << "v0 = 28 m/s, moon = " << height(28.0, MOON_G) << "m" << endl; cout << "v0 = 28 m/s, mars = " << height(28.0, MARS_G) << "m" << endl; return 0; }
13
applepie $ g++ -o default default.cc applepie $./default v0 = 28 m/s, earth = 39.9592m v0 = 28 m/s, moon = 241.975m v0 = 28 m/s, mars = 106.233m applepie $
14
The previous solution works fine but what if the majority of the time, our calculations are on Earth?
15
#include using namespace std; const double EARTH_G = 9.81; const double MOON_G = 1.62; const double MARS_G = 3.69; double height(double v0, double G) { return v0 * v0 / (2 * G); } int main() { cout << "v0 = 5 m/s, earth = " << height(5.0, EARTH_G) << "m" << endl; cout << "v0 = 24 m/s, earth = " << height(24.0, EARTH_G) << "m" << endl; cout << "v0 = 39 m/s, earth = " << height(39.0, EARTH_G) << "m" << endl; cout << "v0 = 46 m/s, earth = " << height(46.0, EARTH_G) << "m" << endl; cout << "v0 = 59 m/s, earth = " << height(59.0, EARTH_G) << "m" << endl; cout << "v0 = 104 m/s, earth = " << height(104.0, EARTH_G) << "m" << endl; cout << "v0 = 92 m/s, earth = " << height(92.0, EARTH_G) << "m" << endl; cout << "v0 = 28 m/s, moon = " << height(28.0, MOON_G) << "m" << endl; cout << "v0 = 28 m/s, mars = " << height(28.0, MARS_G) << "m" << endl; return 0; } Repeated code.
16
Default Parameter Value a programmer can give a parameter in a function a default value if the function call omits an argument for this parameter, then the default value is used instead use the assignment operator to indicate a default parameter values
17
Default Parameter Value Example: our height function double height(double v0, double G = 9.81) { return v0 * v0 / (2 * G); } If the user does not send a second argument to height, it uses the value 9.81 for G.
18
#include using namespace std; const double EARTH_G = 9.81; const double MOON_G = 1.62; const double MARS_G = 3.69; double height(double v0, double G = EARTH_G) { return v0 * v0 / (2 * G); } int main() { cout << "v0 = 28 m/s, moon = " << height(28.0, MOON_G) << "m" << endl; cout << "v0 = 5 m/s, earth = " << height(5.0) << "m" << endl; return 0; } For this function call, parameter G gets the value 1.62, since the calling function sent it a value.
19
#include using namespace std; const double EARTH_G = 9.81; const double MOON_G = 1.62; const double MARS_G = 3.69; double height(double v0, double G = EARTH_G) { return v0 * v0 / (2 * G); } int main() { cout << "v0 = 28 m/s, moon = " << height(28.0, MOON_G) << "m" << endl; cout << "v0 = 5 m/s, earth = " << height(5.0) << "m" << endl; return 0; } For this function call, parameter G did not receive a value from the calling function. Therefore, it defaults to 9.81.
20
#include using namespace std; const double EARTH_G = 9.81; const double MOON_G = 1.62; const double MARS_G = 3.69; double height(double v0, double G) { return v0 * v0 / (2 * G); } int main() { cout << "v0 = 5 m/s, earth = " << height(5.0, EARTH_G) << "m" << endl; cout << "v0 = 24 m/s, earth = " << height(24.0, EARTH_G) << "m" << endl; cout << "v0 = 39 m/s, earth = " << height(39.0, EARTH_G) << "m" << endl; cout << "v0 = 46 m/s, earth = " << height(46.0, EARTH_G) << "m" << endl; cout << "v0 = 59 m/s, earth = " << height(59.0, EARTH_G) << "m" << endl; cout << "v0 = 104 m/s, earth = " << height(104.0, EARTH_G) << "m" << endl; cout << "v0 = 92 m/s, earth = " << height(92.0, EARTH_G) << "m" << endl; cout << "v0 = 28 m/s, moon = " << height(28.0, MOON_G) << "m" << endl; cout << "v0 = 28 m/s, mars = " << height(28.0, MARS_G) << "m" << endl; return 0; } Repeated code.
21
#include using namespace std; const double EARTH_G = 9.81; const double MOON_G = 1.62; const double MARS_G = 3.69; double height(double v0, double G = EARTH_G) { return v0 * v0 / (2 * G); } int main() { cout << "v0 = 5 m/s, earth = " << height(5.0) << "m" << endl; cout << "v0 = 24 m/s, earth = " << height(24.0) << "m" << endl; cout << "v0 = 39 m/s, earth = " << height(39.0) << "m" << endl; cout << "v0 = 46 m/s, earth = " << height(46.0) << "m" << endl; cout << "v0 = 59 m/s, earth = " << height(59.0) << "m" << endl; cout << "v0 = 104 m/s, earth = " << height(104.0) << "m" << endl; cout << "v0 = 92 m/s, earth = " << height(92.0) << "m" << endl; cout << "v0 = 28 m/s, moon = " << height(28.0, MOON_G) << "m" << endl; cout << "v0 = 28 m/s, mars = " << height(28.0, MARS_G) << "m" << endl; return 0; }
22
Default Parameters this is how getline is able to take two or three parameters the third parameter of getline has a default value of '\n' therefore, if you don't send it a stopping character, it defaults to this value
23
Default Parameter Value Rules: 1) in the function header if you specify a default parameter value for a parameter, then all of the parameters to the right of that parameter must also have a default parameter this means that all default parameters are on the right
24
Example: double height(double v0, double G = EARTH_G) { return v0 * v0 / (2 * G); } double height(double v0 = 1.0, double G) { return v0 * v0 / (2 * G); } double height(double v0 = 1.0, double G = EARTH_G) { return v0 * v0 / (2 * G); } OK! Error! OK!
25
Default Parameter Value Rules: 2) in the function call if you send a value to a default parameter, then you must send a value to all of the parameters to the left of that value
26
Example (using a round function): double round(double d = 1.234567, int digits = 3) { return static_cast (d * pow(10.0, digits) + 0.5) / pow(10.0, digits); } int main() { cout << round(1.234567, 3) << endl; cout << round(1.234567) << endl; cout << round(, 3) << endl; cout << round() << endl; return 0; } OK! Compiler error!
27
Default Parameter Rules: default values can be constants, global variables, or function calls double f() {return 3.0;} double height(double v0 = f(), double G = EARTH_G) { return v0 * v0 / (2 * G); }
Similar presentations
© 2025 SlidePlayer.com. Inc.
All rights reserved.