📖 Scenario: You are building a smart contract for a simple calculator on the Ethereum blockchain. You want to create a contract that can add numbers in different ways using the same function name but with different inputs.
🎯 Goal: Build a Solidity contract that demonstrates function overloading by creating multiple add functions with different parameters.
📋 What You'll Learn
Create a contract named Calculator
Create an add function that takes two uint numbers and returns their sum
Create an overloaded add function that takes three uint numbers and returns their sum
Create an overloaded add function that takes two int numbers and returns their sum
💡 Why This Matters
🌍 Real World
Function overloading is useful in smart contracts to provide flexible interfaces for users, allowing the same function name to handle different input types or numbers.
💼 Career
Understanding function overloading is important for blockchain developers to write clean, reusable, and user-friendly smart contracts.
Progress0 / 4 steps
1
Create the Calculator contract with the first add function
Create a Solidity contract named Calculator. Inside it, write a public function called add that takes two uint parameters named a and b, and returns their sum as uint.
Blockchain / Solidity
Hint
Remember to declare the contract with contract Calculator { } and the function with the exact name add and parameters uint a, uint b.
2
Add an overloaded add function with three uint parameters
Inside the Calculator contract, add another public function named add that takes three uint parameters named a, b, and c, and returns their sum as uint.
Blockchain / Solidity
Hint
Use the same function name add but with three uint parameters to overload the function.
3
Add an overloaded add function with two int parameters
Inside the Calculator contract, add another public function named add that takes two int parameters named a and b, and returns their sum as int.
Blockchain / Solidity
Hint
Overload the add function again but this time use int parameters instead of uint.
4
Test the add functions by calling them
Add a public function named testAdd that calls each add function with example values and returns the sum of all results as uint. Use add(2, 3), add(1, 2, 3), and add(int(-1), int(4)). Convert the last int result to uint by casting. Then return the total sum.
Blockchain / Solidity
Hint
Call each add function with the exact values and add their results. Cast the int result to uint before adding.
Practice
(1/5)
1. What is function overloading in blockchain smart contracts?
easy
A. Writing functions without any input parameters
B. Defining multiple functions with the same name but different inputs
C. Calling a function from another contract
D. Using the same function name for different contracts
Solution
Step 1: Understand the term 'function overloading'
Function overloading means having multiple functions with the same name but different input types or counts.
Step 2: Apply this to blockchain smart contracts
In smart contracts, this allows handling different input scenarios with one function name.
Final Answer:
Defining multiple functions with the same name but different inputs -> Option B
Quick Check:
Function overloading = same name, different inputs [OK]
Hint: Same name, different inputs means overloading [OK]
Common Mistakes:
Confusing overloading with calling functions
Thinking overloading means same inputs
Mixing overloading with inheritance
2. Which of the following is the correct syntax for function overloading in Solidity?
easy
A. function transfer(uint amount) public {} function transfer(address to, uint amount) public {}
B. function transfer(uint amount) public {} function transfer(uint amount) private {}
C. function transfer(uint amount) public {} function transfer(uint amount) public {}
D. function transfer() public {} function transfer() public {}
Solution
Step 1: Check function names and parameters
Both functions are named 'transfer' but have different parameter lists (one with uint, one with address and uint).
Step 2: Confirm this matches overloading rules
Overloading requires same name but different inputs, which function transfer(uint amount) public {} function transfer(address to, uint amount) public {} shows correctly.
Final Answer:
function transfer(uint amount) public {} function transfer(address to, uint amount) public {} -> Option A
Quick Check:
Different inputs, same name = correct syntax [OK]
Hint: Different parameters, same name is correct overloading [OK]
Common Mistakes:
Using same parameters for both functions
Changing only visibility, not parameters
Defining identical functions twice
3. Given the Solidity code:
contract Example {
function calculate(uint x) public pure returns (uint) {
return x * 2;
}
function calculate(uint x, uint y) public pure returns (uint) {
return x + y;
}
}
What is the output of calculate(3) and calculate(3, 4)?
medium
A. 6 and 12
B. 3 and 7
C. 6 and 7
D. Compilation error
Solution
Step 1: Analyze the first function call calculate(3)
This calls the function with one uint parameter, returning 3 * 2 = 6.
Step 2: Analyze the second function call calculate(3, 4)
This calls the overloaded function with two uint parameters, returning 3 + 4 = 7.
Final Answer:
6 and 7 -> Option C
Quick Check:
Single input doubles, two inputs add [OK]
Hint: Match input count to correct function [OK]
Common Mistakes:
Assuming both calls use the same function
Mixing multiplication and addition results
Expecting compilation error due to overloading
4. Identify the error in this Solidity contract using function overloading:
contract Test {
function send(address to) public {}
function send(address to) public {}
}
medium
A. Functions have the same name and parameters causing a duplicate definition error
B. Functions must have different visibility to overload
C. Function names must be unique in a contract
D. Functions must return a value to overload
Solution
Step 1: Check function names and parameters
Both functions are named 'send' and have the exact same parameter list (address to).
Step 2: Understand overloading rules
Overloading requires different parameters; identical signatures cause duplicate definition error.
Final Answer:
Functions have the same name and parameters causing a duplicate definition error -> Option A
Quick Check:
Same name and parameters = error [OK]
Hint: Overloaded functions must differ in parameters [OK]
Common Mistakes:
Thinking visibility difference allows overloading
Believing function return type affects overloading
Assuming same name always allowed
5. You want to create a smart contract function deposit that accepts either a single uint amount or a uint amount with a string note. How would you overload the deposit function correctly?
hard
A. function deposit(uint amount) public {} function deposit(string memory note, uint amount) public {}
B. function deposit(uint amount) public {} function deposit() public {}
C. function deposit(uint amount) public {} function deposit(uint amount) public {}
D. function deposit(uint amount) public {} function deposit(uint amount, string memory note) public {}
Solution
Step 1: Define first function with single uint parameter
The first deposit function takes only the amount as uint.
Step 2: Define second function with uint and string parameters
The second deposit function adds a string note parameter after the uint amount.
Step 3: Confirm parameter order and types differ
Both functions share the name but differ in parameter count and types, valid overloading.
Final Answer:
function deposit(uint amount) public {} function deposit(uint amount, string memory note) public {} -> Option D
Quick Check:
Same name, different parameters = correct overloading [OK]
Hint: Overload by changing parameter count or types [OK]
Common Mistakes:
Swapping parameter order causing confusion
Using identical parameter lists
Omitting parameter types
Recommended
Ready to prove it?
Pass the test and this pattern moves unknownstrongwhile earning +1 Grip toward your certificate.