Bird
Raised Fist0
Blockchain / Solidityprogramming~10 mins

Function overloading in Blockchain / Solidity - Step-by-Step Execution

Choose your learning style10 modes available
Concept Flow - Function overloading
Call function with args
↓
Check function signatures
↓
Match args to signature?
No→Error: No matching function
Yes↓
Execute matched function
↓
Return result
When a function is called, the program checks all versions of that function to find one whose input matches the call, then runs that version.
Execution Sample
Blockchain / Solidity
contract Example {
  function add(uint a, uint b) public pure returns (uint) {
    return a + b;
  }
  function add(uint a, uint b, uint c) public pure returns (uint) {
    return a + b + c;
  }
}
This contract has two 'add' functions: one adds two numbers, the other adds three.
Execution Table
StepFunction CalledArgumentsSignature MatchedActionOutput
1add(2, 3)add(uint,uint)Execute two-arg add5
2add(1, 2, 3)add(uint,uint,uint)Execute three-arg add6
3add(4)No matchError: No matching functionError
💡 Execution stops when a matching function signature is found or error if none matches.
Variable Tracker
VariableStartAfter Call 1After Call 2After Call 3
aN/A214
bN/A32N/A
cN/AN/A3N/A
resultN/A56N/A
Key Moments - 2 Insights
Why does calling add(4) cause an error?
Because no function 'add' is defined with a single argument, as shown in execution_table row 3.
How does the program decide which 'add' function to run?
It matches the number and types of arguments to the function signatures, as seen in execution_table rows 1 and 2.
Visual Quiz - 3 Questions
Test your understanding
Look at the execution_table, what is the output when add(2, 3) is called?
AError
B6
C5
DUndefined
💡 Hint
Check execution_table row 1 under Output column.
At which step does the function call fail due to no matching signature?
AStep 3
BStep 2
CStep 1
DNone
💡 Hint
Look at execution_table row 3 for the error case.
If we add a function add(uint a) returning a, what would happen at step 3?
AStill error
BIt would execute and return 4
CReturn 0
DCompile error
💡 Hint
Refer to how matching signatures work in execution_table and concept_flow.
Concept Snapshot
Function overloading lets you have multiple functions with the same name but different inputs.
When called, the program picks the function whose inputs match the call.
If no match, it causes an error.
Useful to handle similar actions with different data.
In blockchain smart contracts, this helps keep code clean and clear.
Full Transcript
Function overloading means having several functions with the same name but different input types or counts. When you call such a function, the program looks at the inputs you gave and finds the matching function version to run. If it finds none, it gives an error. For example, a contract might have two 'add' functions: one adding two numbers, another adding three. Calling add(2,3) runs the two-argument version and returns 5. Calling add(1,2,3) runs the three-argument version and returns 6. Calling add(4) causes an error because no single-argument version exists. This helps write neat code that handles similar tasks with different inputs.

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

  1. Step 1: Understand the term 'function overloading'

    Function overloading means having multiple functions with the same name but different input types or counts.
  2. Step 2: Apply this to blockchain smart contracts

    In smart contracts, this allows handling different input scenarios with one function name.
  3. Final Answer:

    Defining multiple functions with the same name but different inputs -> Option B
  4. 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

  1. 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).
  2. 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.
  3. Final Answer:

    function transfer(uint amount) public {} function transfer(address to, uint amount) public {} -> Option A
  4. 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

  1. Step 1: Analyze the first function call calculate(3)

    This calls the function with one uint parameter, returning 3 * 2 = 6.
  2. Step 2: Analyze the second function call calculate(3, 4)

    This calls the overloaded function with two uint parameters, returning 3 + 4 = 7.
  3. Final Answer:

    6 and 7 -> Option C
  4. 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

  1. Step 1: Check function names and parameters

    Both functions are named 'send' and have the exact same parameter list (address to).
  2. Step 2: Understand overloading rules

    Overloading requires different parameters; identical signatures cause duplicate definition error.
  3. Final Answer:

    Functions have the same name and parameters causing a duplicate definition error -> Option A
  4. 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

  1. Step 1: Define first function with single uint parameter

    The first deposit function takes only the amount as uint.
  2. Step 2: Define second function with uint and string parameters

    The second deposit function adds a string note parameter after the uint amount.
  3. Step 3: Confirm parameter order and types differ

    Both functions share the name but differ in parameter count and types, valid overloading.
  4. Final Answer:

    function deposit(uint amount) public {} function deposit(uint amount, string memory note) public {} -> Option D
  5. 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 unknown strong while earning +1 Grip toward your certificate.

10 questions~5 mineasy hard