*************
C++
topic:?命名作用域與函數調用
*************
![]() |
The concept is fully introducted in the last artical. Please refer to?抽象:C++命名作用域與函數調用-CSDN博客
And let's make a calculator to review the basic structure in c++.
1、全局函數
A good habit to name the global function is using global_XXX.
#include <iostream>int global_add(int a, int b) // 全局函數的名字是global_add
{return a + b; // 返回a和b的和
}
2、命名空間
Like a villa, a space to name the variables.
#include <iostream>int global_add(int a, int b) // 全局函數的名字是global_add
{return a + b; // 返回a和b的和
}namespace calculate
{// do sth. here
}
call global function in namespace.
#include <iostream>int global_add(int a, int b) // 全局函數的名字是global_add
{return a + b; // 返回a和b的和
}namespace calculate
{// 調用全局函數int add(int a, int b) // 函數的名字是add{return global_add(a, b); // 返回全局函數的結果}
}
and of course you can add a function directly in namespace calculate.
#include <iostream>// 全局加法函數
int global_add(int a, int b)
{return a + b;
}namespace calculate
{// 1. 直接定義在命名空間中的加法函數(獨立實現)int add_in_class(int a, int b) {return a + b; // 直接實現加法}// 2. 調用全局加法函數的版本(復用全局實現)int add_by_global(int a, int b) {return global_add(a, b); // 調用全局函數}
}
Extend add class.
#include <iostream>// 全局加法函數
int global_add(int a, int b)
{return a + b;
}namespace calculate
{// 定義一個類addclass add{public:// 1. 直接定義在類中的加法函數(獨立實現)int add_in_class(int a, int b) {return a + b; // 直接實現加法}// 2. 調用全局加法函數的版本(復用全局實現)int add_by_global(int a, int b) {return global_add(a, b); // 調用全局函數}};
}
call the add functions in the add class is easy.
namespace calculate
{// 定義一個類addclass add{public:// 1. 直接定義在類中的加法函數(獨立實現)int add_in_class(int a, int b){return a + b; // 直接實現加法}// 2. 調用全局加法函數的版本(復用全局實現)int add_by_global(int a, int b){return global_add(a, b); // 調用全局函數}// 調用加法函數void call_add(int a, int b){int result1 = add_in_class(a, b); // 調用類內的加法函數int result2 = add_by_global(a, b); // 調用全局加法函數}};
extend suntract class
namespace calculate
{// 定義一個類addclass add{public:// 1. 直接定義在類中的加法函數(獨立實現)int add_in_class(int a, int b){return a + b; // 直接實現加法}// 2. 調用全局加法函數的版本(復用全局實現)int add_by_global(int a, int b){return global_add(a, b); // 調用全局函數}// 調用加法函數void call_add(int a, int b){int result1 = add_in_class(a, b); // 調用類內的加法函數int result2 = add_by_global(a, b); // 調用全局加法函數}};// 拓展減法的類class subtract{public:// 1. 直接定義在類中的減法函數(獨立實現)int subtract_in_class(int a, int b){return a - b; // 直接實現減法}// 2. 調用全局加法函數的版本(復用全局實現)int subtract_by_global(int a, int b){return global_add(a, -b); // 調用全局函數}};
}
extend an auto calculating calss, so that program can do the adding and subtracting at the same time.
#include <iostream>// 全局加法函數
int global_add(int a, int b)
{return a + b;
}namespace calculate
{// 定義一個類addclass add{public:// 1. 直接定義在類中的加法函數(獨立實現)int add_in_class(int a, int b){return a + b; // 直接實現加法}// 2. 調用全局加法函數的版本(復用全局實現)int add_by_global(int a, int b){return global_add(a, b); // 調用全局函數}// 調用加法函數void call_add(int a, int b){int result1 = add_in_class(a, b); // 調用類內的加法函數int result2 = add_by_global(a, b); // 調用全局加法函數}};// 拓展減法的類class subtract{public:// 1. 直接定義在類中的減法函數(獨立實現)int subtract_in_class(int a, int b){return a - b; // 直接實現減法}// 2. 調用全局加法函數的版本(復用全局實現)int subtract_by_global(int a, int b){return global_add(a, -b); // 調用全局函數}};// 執行同時調用加法和減法class autoCalculate{};
Create an object to call the function in other classes.?If? you want to call functions of?other class, make sure to creating an object from the class which is refreed. Do have to create an object when global function is called.
#include <iostream>// 全局加法函數
int global_add(int a, int b)
{return a + b;
}namespace calculate
{// 定義一個類addclass add{public:// 1. 直接定義在類中的加法函數(獨立實現)int add_in_class(int a, int b){return a + b; // 直接實現加法}// 2. 調用全局加法函數的版本(復用全局實現)int add_by_global(int a, int b){return global_add(a, b); // 調用全局函數}// 調用加法函數void call_add(int a, int b){int result1 = add_in_class(a, b); // 調用類內的加法函數int result2 = add_by_global(a, b); // 調用全局加法函數}};// 拓展減法的類class subtract{public:// 1. 直接定義在類中的減法函數(獨立實現)int subtract_in_class(int a, int b){return a - b; // 直接實現減法}// 2. 調用全局加法函數的版本(復用全局實現)int subtract_by_global(int a, int b){return global_add(a, -b); // 調用全局函數}};// 執行同時調用加法和減法class autoCalculate{public:add autoAdd; // 創建一個add類的對象autoAddsubtract autoSubtract; // 創建一個subtract類的對象autoSubtractvoid call_add_subtract(int a, int b){autoAdd.add_in_class(a, b); // 調用類內的加法函數autoSubtract.subtract_in_class(a, b); // 調用類內的減法函數autoAdd.add_by_global(a, b); // 調用全局加法函數global_add(a, b); // 調用全局加法函數時不需要創建對象}};
}
Main code is compulsory. In the program, main code is the start of the system. All codes start from mian code.
#include <iostream>// 全局加法函數
int global_add(int a, int b)
{return a + b;
}namespace calculate
{// 定義一個類addclass add{public:// 1. 直接定義在類中的加法函數(獨立實現)int add_in_class(int a, int b){return a + b; // 直接實現加法}// 2. 調用全局加法函數的版本(復用全局實現)int add_by_global(int a, int b){return global_add(a, b); // 調用全局函數}// 調用加法函數void call_add(int a, int b){int result1 = add_in_class(a, b); // 調用類內的加法函數int result2 = add_by_global(a, b); // 調用全局加法函數}};// 拓展減法的類class subtract{public:// 1. 直接定義在類中的減法函數(獨立實現)int subtract_in_class(int a, int b){return a - b; // 直接實現減法}// 2. 調用全局加法函數的版本(復用全局實現)int subtract_by_global(int a, int b){return global_add(a, -b); // 調用全局函數}};// 執行同時調用加法和減法class autoCalculate{public:add autoAdd; // 創建一個add類的對象autoAddsubtract autoSubtract; // 創建一個subtract類的對象autoSubtractvoid call_add_subtract(int a, int b){autoAdd.add_in_class(a, b); // 調用類內的加法函數autoSubtract.subtract_in_class(a, b); // 調用類內的減法函數autoAdd.add_by_global(a, b); // 調用全局加法函數global_add(a, b); // 調用全局加法函數時不需要創建對象}};// 主函數是程序的入口,所有的程序都從這里開始執行int main(){int a = 13;int b = 38;global_add(a, b); // 調用全局加法函數,return 51// 調用calculate命名空間中的add類calculate::add myAdd; // 創建一個add類的對象myAddmyAdd.add_in_class(a, b); // 調用類內的加法函數,return 51myAdd.add_by_global(a, b); // 調用全局加法函數,return 51// 調用calculate命名空間中的subtract類calculate::subtract mySubtract; // 創建一個subtract類的對象mySubtractmySubtract.subtract_in_class(a, b); // 調用類內的減法函數,return -25mySubtract.subtract_by_global(a, b); // 調用全局加法函數,return -25// 調用calculate命名空間中的autoCalculate類calculate::autoCalculate myAutoCalculate; // 創建一個autoCalculate類的對象myAutoCalculatemyAutoCalculate.call_add_subtract(a, b); // 調用類內的加法和減法函數, return 51和-25return 0; // 返回0表示程序正常結束}
}
Head file is a good way to tear the code apart.?In the file, too much code puzzles angineer. So one file does only one thing. Head file difine the functions and variables. Source files declare the functions.?
頭文件?calculator.h
:
#ifndef CALCULATOR_H
#define CALCULATOR_H#include <iostream>// 全局加法函數
int global_add(int a, int b);namespace calculate
{// 定義一個類addclass add{public:// 1. 直接定義在類中的加法函數(獨立實現)int add_in_class(int a, int b);// 2. 調用全局加法函數的版本(復用全局實現)int add_by_global(int a, int b);// 調用加法函數void call_add(int a, int b);};// 拓展減法的類class subtract{public:// 1. 直接定義在類中的減法函數(獨立實現)int subtract_in_class(int a, int b);// 2. 調用全局加法函數的版本(復用全局實現)int subtract_by_global(int a, int b);};// 執行同時調用加法和減法class autoCalculate{public:add autoAdd; // 創建一個add類的對象autoAddsubtract autoSubtract; // 創建一個subtract類的對象autoSubtractvoid call_add_subtract(int a, int b);};
}#endif // CALCULATOR_H
源文件?calculator.cpp
:
#include "calculator.h"// 全局加法函數實現
int global_add(int a, int b)
{return a + b;
}namespace calculate
{// add類方法實現int add::add_in_class(int a, int b){return a + b;}int add::add_by_global(int a, int b){return global_add(a, b);}void add::call_add(int a, int b){int result1 = add_in_class(a, b);int result2 = add_by_global(a, b);}// subtract類方法實現int subtract::subtract_in_class(int a, int b){return a - b;}int subtract::subtract_by_global(int a, int b){return global_add(a, -b);}// autoCalculate類方法實現void autoCalculate::call_add_subtract(int a, int b){autoAdd.add_in_class(a, b);autoSubtract.subtract_in_class(a, b);autoAdd.add_by_global(a, b);global_add(a, b);}
}
主程序?main.cpp
:
#include "calculator.h"int main()
{int a = 13;int b = 38;global_add(a, b); // 調用全局加法函數,return 51// 調用calculate命名空間中的add類calculate::add myAdd; // 創建一個add類的對象myAddmyAdd.add_in_class(a, b); // 調用類內的加法函數,return 51myAdd.add_by_global(a, b); // 調用全局加法函數,return 51// 調用calculate命名空間中的subtract類calculate::subtract mySubtract; // 創建一個subtract類的對象mySubtractmySubtract.subtract_in_class(a, b); // 調用類內的減法函數,return -25mySubtract.subtract_by_global(a, b); // 調用全局加法函數,return -25// 調用calculate命名空間中的autoCalculate類calculate::autoCalculate myAutoCalculate; // 創建一個autoCalculate類的對象myAutoCalculatemyAutoCalculate.call_add_subtract(a, b); // 調用類內的加法和減法函數, return 51和-25return 0; // 返回0表示程序正常結束
}