Chapter II. Modular Programming in C++ TCT

Download as pptx, pdf, or txt
Download as pptx, pdf, or txt
You are on page 1of 69

TRƯỜNG ĐẠI HỌC BÁCH KHOA HÀ NỘI

KỸ THUẬT LẬP TRÌNH HỆ CƠ ĐIỆN TỬ


Programming Engineering in Mechatronics

Giảng viên: TS. Nguyễn Xuân Thuận


Đơn vị: Bộ môn Cơ điện tử, Viện Cơ khí

Hà Nội, 2020 1
Chapter II. Modular programming in C++

 The basics of functions


 How to use functions on a more professional level?
 Namespaces and storage classes
 Preprocessor directives of C++

2
Chapter II. Modular programming in C++

 The basics of functions


 How to use functions on a more professional level?
 Namespaces and storage classes
 Preprocessor directives of C++

3
The basics of functions

 Defining, calling and declaring functions


 The return value of functions
 Parametrizing functions
 Programming with functions

4
The basics of functions

 Defining, calling and declaring functions


• Một số hàm được định nghĩa sẵn trong C++

function
sqrt()
isalpha()
atoi()
rand()
strlen()
wcslen()

5
The basics of functions

 Defining, calling and declaring functions


• Dạng tổng quát của một hàm được biểu diễn

Function definition

6
The basics of functions

 Defining, calling and declaring functions

7
The basics of functions

 Defining, calling and declaring functions


• The steps of calling a function

function_name (〈argument 1 , argument 2 , … argument n 〉)

Steps of calling a function

8
The basics of functions

 Defining, calling and declaring functions


• Trước khi gọi hàm, cần phải khai báo hàm.

Function declaration

Function definition

9
The basics of functions

 Defining, calling and declaring functions


• The complete declaration of a function (its prototype ) contains the name and the
type of the function and provides information about the number and the type of the
parameters:

return_value function_name(〈parameter declaration list〉);


return_value function_name(〈type_list〉);

declaration C interpretation C++ interpretation


type funct(); type funct(...); type funct(void);
type funct(...); type funct(...); type funct(...);
type funct(void); type funct(void); type funct(void);
10
The basics of functions

 Defining, calling and declaring functions


• C++ makes it possible that a parameter list containing at least one parameter should
end with three dots (...). A function defined in that way can be called with at least one
parameter but also with any number or type of arguments. Let's look at the prototype
of the function sscanf ().

• The transferring (throw) of exceptions to the caller function can be enabled or disabled
in function header
return_type function_name (〈parameterlist〉) 〈throw(〈type_list〉)〉
    {
                〈local definitions and declarations〉
                〈statements〉
                return 〈expression〉;
    }

11
The basics of functions

 The return value of functions


- Chương trình kiểm tra số nguyên tố

12
The basics of functions

 The return value of functions


• By using the type void, we can create functions that do not return any value.
• Chương trình hiển thị tìm số hoàn chỉnh trong 1 khoảng cho trước

13
The basics of functions

 Parametrizing functions
• Các kiểu dữ liệu có thể sử dụng trong hàm:
(bool, char, wchar_t, short, int, long, long long, float, double, enumeration, reference
and pointer) or structure, union, class or array…

14
The basics of functions

 Parametrizing functions
 Parameter passing methods
• Passing parameters by value

15
The basics of functions

 Parametrizing functions
 Parameter passing methods
• Passing parameters by value

If the type qualifier const is placed in the parameter list, we can restrict the modification of the
memory space to which a pointer points ( const double*p) and restrict the modification of the
value of the pointer ( double * const p) within a function.
16
The basics of functions

 Parametrizing functions
 Parameter passing methods
• Passing parameters by reference

17
The basics of functions

 Defining, calling and declaring functions


 The return value of functions
 Parametrizing functions
 Programming with functions

18
The basics of functions

 Programming with functions


 Exchanging data between functions using global variables

19
The basics of functions

 Programming with functions


 Exchanging data between functions using global variables
• Solution for above example

20
The basics of functions

 Programming with functions


 Exchanging data between functions using global variables
• Solution for above example

21
The basics of functions

 Programming with functions


 Exchanging data between functions using parameters

22
The basics of functions

 Programming with functions


 Exchanging data between functions using parameters

23
The basics of functions

 Programming with functions


 Exchanging data between functions using parameters

24
The basics of functions

 Programming with functions


 Implementing a simple menu driven program structure

25
The basics of functions

 Programming with functions


 Recursive functions more efficient
• factorial:

26
The basics of functions

 Programming with functions


 Recursive functions more efficient
• Fibonacci numbers:

27
The basics of functions

 Programming with functions


 Recursive functions
• greatest common divisor (gcd):

28
The basics of functions

 Programming with functions


 Recursive functions
• binomial numbers:

29
Chapter II. Modular programming in C++

 The basics of functions


 How to use functions on a more professional level?
 Namespaces and storage classes
 Preprocessor directives of C++

30
How to use functions on a more professional level?

 Inline functions
 Overloading (redefining) function names
 Function templates

31
How to use functions on a more professional level?

 Inline functions (hàm nội tuyến)


• Trong trình biên dịch C++, để giảm thời gian gọi hàm, ta sẽ sử dụng từ khóa inline.
• This solution is recommended to be used for small-sized and frequently called
functions.

32
How to use functions on a more professional level?

 Kiểm tra vị trí của một giá trị trong một véc tơ

33
How to use functions on a more professional level?

 Inline functions
 Overloading (redefining) function names
 Function templates

34
How to use functions on a more professional level?

 Overloading (redefining) function names


• Overloading a function (Nạp chồng hàm) khai báo 2 hàm có tên gọi và mục đích sử
dụng giống nhau nhưng thông số khác nhau.

35
How to use functions on a more professional level?

 Overloading (redefining) function names

36
How to use functions on a more professional level?

 Inline functions
 Overloading (redefining) function names
 Function templates

37
How to use functions on a more professional level?

 Function templates (khuôn mẫu hàm)


 Creating and using function templates
• A template declaration starts with the keyword template, followed by the parameters
of the template enclosed within the signs < and >. In most cases, these parameters are
generic type names but they can contain variables as well. Generic type names should
be preceded by the keyword class or typename.

38
How to use functions on a more professional level?

 Function templates
 Creating and using function templates

39
How to use functions on a more professional level?

 Function templates
 Creating and using function templates

40
How to use functions on a more professional level?

 Function templates
 Some further function template examples

41
Chapter II. Modular programming in C++

 The basics of functions


 How to use functions on a more professional level?
 Namespaces and storage classes
 Preprocessor directives of C++

42
Namespaces and storage classes

 Storage classes of variables and functions


 Namespaces

43
Namespaces and storage classes

 Storage classes of variables and functions


 Lớp lưu trữ (Storage Class) định nghĩa phạm vi và vòng đời của biến
và/hoặc các hàm bên trong một chương trình C++. Chúng thường
đứng trước kiểu dữ liệu mà chúng tác động. Dưới đây là các lớp lưu
trữ có thể được sử dụng trong C++:
 Lớp lưu trữ auto trong C++ là lớp lưu trữ mặc định cho tất cả biến cục
bộ trong C++:
 Lớp lưu trữ register trong C++ được sử dụng để định nghĩa các biến
cục bộ nên được lưu giữ trong một thanh ghi thay vì RAM
 Lớp lưu trữ static trong C++ nói với compiler để giữ một biến cục bộ
tồn tại trong toàn bộ thời gian sống của chương trinh
 Lớp lưu trữ extern trong C++ được dùng để cung cấp một tham chiếu
của một biến toàn cục được nhìn thấy bởi TẤT CẢ các file chương
trình
44
Namespaces and storage classes

 Storage classes of variables

45
Namespaces and storage classes

 Storage classes of variables and functions


 Namespaces

46
Namespaces and storage classes

 Namespaces
Khi Code đang viết có hàm tên là xyz() và có thư viện khác có sẵn mà
cũng có hàm xyz(). Bây giờ, trình biên dịch không biết phiên bản nào
của hàm xyz() mà bạn muốn sử dụng trong code của mình.
Một namespace trong C++ giúp bạn giải quyết tình huống này và
được sử dụng như là thông tin bổ sung để phân biệt các hàm, lớp,
biến… cùng tên có sẵn trong các thư viện khác nhau. Sử dụng
namespace trong C++, bạn có thể định nghĩa bối cảnh trong đó các
tên được định nghĩa. Về bản chất, một namespace định nghĩa một
phạm vi trong C++.

47
Namespaces and storage classes

 Namespaces
 The default namespaces of C++ and the scope operator

48
Namespaces and storage classes

 Namespaces
 Creating and using user-defined namespaces
• Creating namespaces

49
Namespaces and storage classes

 Namespaces trong namespaces

50
Namespaces and storage classes

 Namespaces
 Creating and using user-defined namespaces
• Anonymous namespaces:
Dùng tương tự như biến thường

51
Chapter II. Modular programming in C++

 The basics of functions


 How to use functions on a more professional level?
 Namespaces and storage classes
 Preprocessor directives of C++

52
Preprocessor directives of C++

The compilation process in C++ 53


Preprocessor directives of C++

 Including files
 Conditional compilation
 Using macros

54
Preprocessor directives of C++

 Including files
The following table sums up the keywords and language elements that can be used in header files:
C++ elements Example
Comments // comment
Conditional directives #ifdef MOTOROLA
Macro definitions #define INTEL
#include directives #include <string>
Enumerations enum response {no, yes, maybe};
Constant definitions const double pi=3.1415265;
Namespaces having an identifier namespace nsrand { }
Name declarations struct vector3D;
Type definitions struct complex {double re, im;};
Variable declarations extern double point[];
Function prototypes double Average(double, double);
inline function definitions inline int Sqr(int a) {return a*a;}
template declarations template <class T> T Sqr(T a);
template definitions template <class T> T Sqr(T a) {return a*a;} 55
Preprocessor directives of C++

 Including files
The following elements should never be placed in include files:
•definitions of non-inline functions,
•variable definitions,
•definitions of anonymous namespaces.

One part of the elements that can be placed in a header file have to be included
only once in a code. That is why, all header files have to have a special
preprocessing structure based on conditional directives:

56
Preprocessor directives of C++

 Including files
 Conditional compilation
 Using macros

57
Preprocessor directives of C++

 Conditional compilation
• Bộ tiền xử lý (Preprocessor) là các directive (chỉ thị), cung cấp chỉ lệnh tới bộ biên dịch
để tiền xử lý thông tin trước khi bắt đầu biên dịch thực sự.: 
#if, #ifdef, #ifndef, #elif, #else and #endif.
• - Dùng để kiểm tra/ chạy một đoạn chương trình

58
Preprocessor directives of C++

 Conditional compilation
• Instead of the structure above, it is better to use a solution that examines the
definition of the symbol TEST. For that purpose, TEST can be defined without a value,
which can be assigned to it from a parameter of the compiler:

59
Preprocessor directives of C++

 Conditional compilation
• Each pair of the following checkings return the same results:

#if defined(TEST) #ifdef TEST


... // defined ... // defined
#endif #endif

   

#if !defined(TEST) #ifndef TEST


... // not defined ... // not defined
#endif #endif

60
Preprocessor directives of C++

 Conditional compilation
• If the following structure is used, we can choose between two code parts:

61
Preprocessor directives of C++

 Including files
 Conditional compilation
 Using macros

62
Preprocessor directives of C++

 Using macros
 Symbolic constants
• Symbolic constants can be created by using the simple form of the #define directive:

63
Preprocessor directives of C++

 Using macros
 Parameterized macros

• Inline và macros được sử dụng tương đương nhau

64
Preprocessor directives of C++

 Using macros
 Undefining a macro
• A macro can be undefined anytime and can be redefined again, even with a different
content. It can be undefined by using the #undef directive. Before redefining a macro
with a new content, the old definition always has to be undefined.
The #undef statement does not signal an error if the macro to be undefined does not
exist:
Original source code Substituted code

int main() {
#define MACRO(x) (x) + 7
int main() {
int a = MACRO(12); int a = (12) + 7;
#undef MACRO
a = MACRO(12); //lỗi
a = MACRO(12); //lỗi a = 123
#define MACRO 123
}
a = MACRO
}

65
Preprocessor directives of C++

 Using macros
 Macro operators

66
Preprocessor directives of C++

 Using macros
 Macro operators
• By using the ## operator, two syntactic units (tokens) can be concatenated. To achieve
this, the ## operator has to be inserted between the parameters in the body of a
macro.

67
Preprocessor directives of C++

 Using macros
 Predefined macros
Macro Description Example

__DATE__ String constant containing the date of the compilation. "Oct 02 2013"

__TIME__ String constant containing the time of the compilation. "10:02:04"

__TIMESTAMP__ The date and time of the last modification of the source file in a "Mon Jul 29
string constant" 07:33:29 2013"

__FILE__ String constant containing the name of the source file. "c:\\preproc.cpp"

A numeric constant, containing the number of the actual line of


__LINE__ 1223
the source file (numbering starts from 1).

Its value is 1 if the compiler works as an ANSI C++, otherwise it is


__STDC__  
not defined.
Its value is 1, if its value is tested in a C++ source file, otherwise it
__cplusplus   68
is not defined.
Preprocessor directives of C++

69

You might also like