0% found this document useful (0 votes)
18 views15 pages

L 01 Procedural

The document provides an overview of procedural programming in C++, focusing on standalone functions, primitive types, and control structures. It covers key concepts such as types, variables, operators, expressions, conditionals, loops, functions, references, pointers, nullptr, strings, and static variables. The content is structured to introduce fundamental programming patterns and rules governing C++ syntax and semantics.

Uploaded by

13annika3
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PPT, PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
18 views15 pages

L 01 Procedural

The document provides an overview of procedural programming in C++, focusing on standalone functions, primitive types, and control structures. It covers key concepts such as types, variables, operators, expressions, conditionals, loops, functions, references, pointers, nullptr, strings, and static variables. The content is structured to introduce fundamental programming patterns and rules governing C++ syntax and semantics.

Uploaded by

13annika3
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PPT, PDF, TXT or read online on Scribd
You are on page 1/ 15

CS 44001/54001

CS III: Programming Patterns

Mikhail Nesterenko
Procedural Programming
without classes: using standalone functions,
primitive types and simple control structures
Before We Go
• a computer program is governed by rules
• what are
– syntax rules?
– semantic rules?
– stylistic rules?

• C++ was originally developed by Bjarne Stroustrup. Now maintained by


International Standards Organization (ISO) which publishes standards approx.
every 3 years: C++11, C++14, C++17 …
– unspecified behavior – not mentioned in standard, ex: order of parameter
evaluation in a function invocation
– undefined behavior – defined in the standard but left without
specific result, ex: dereferencing nullptr
– implementation-defined behavior - depends on the
implementation ex: sizeof(int)

3
Types, Variables
• primitive (basic/built-in) types – string, int, bool, char, double
– exist but won’t need
• int may be long or short, signed or unsigned
• char may be signed or unsigned
• floating point types may be float, double or long double
– auto – type to be determined by compiler (C++11)
auto i =7; // nice for type of loop variables
could also be auto & and const auto
– decltype(expr) – type is same as expr (C++11)
decltype(i) j =8;

• variable – denotes memory location of particular type, holds values


– what is block? what is local variable? Can a variable be local to a block?
what is scope of a variable?

4
Operators, Arity
operators – built-in functions
• fixed number of operands (parameters)

arity – the number of operands


• unary
++ and -- prefix/sufix(postifx) preincrement/postincrement or
predecrement /postdecrement
• use prefix porm
• prefix form returns an l-value (what’s that?)
• binary
– assingment, compound assingment
• ternary – what’s that?

What are these operators? What is their arity?


= ! - ++ += << ||

5
Expressions

• what is a constant? Literal constant? What other kind of constant is there?


– how is contant type determined?
• What is expression? What is expression evaluation? How is expression type
determined?

6
Conditionals and Loops
• conditionals
– if/else
– switch
– ternary expression
• loops
– while
– do-while
– for
• for(init_statement; expression; post_statement)
action
• range-based-for (C++11)
int a[] = {10,20,30,40};
for(auto e: a)
cout << e;
can be auto &e or const auto &e
how do I write a range-based-for to add 5 to each element of the array?
7
Functions
• what is function invocation/call/definition/declaration?
• what is the difference between argument and parameter?
• in procedural programming functions are standalone
• function definition – includes head and body (implementation)
• function overloading – multiple different functions within the same scope
provided that they have different signatures
double max(double, double);
int max(int, int);
• resolution (of function call) – compile time process of associating function
invocation with function declaration
int i = max(10, 20); // resolved to second declaration
• client/caller – function that invokes another function
– when dealing with programming patterns, function that uses the pattern

8
Function Parameters, Default Values
• parameters may be passed by value, by reference, what’s the difference?

• default values
– default parameter value may be specified at function declaration
void move(int from, int to=0, int by =1);
or definition, but not both
– convention – specify at declaration.
– client has an option of specifying parameter or using default value
move (2, 3, 4);
move (2, 3);
move (2);

– provides convenient alternative to overloading

– only trailing parameters may have default values


void move(int from, int to=0, int by); // illegal
9
References
reference – alias (another name) for data
• declared as type&
• has to be initialized at declaration and cannot be changed
int& b = a;
++b; // changes a
• can hold only lvalues – values that refer to memory location, can be used
on the left-hand-side of assignment
– as opposed to rvalues
• used for parameter passing
void swap(int &a; int &b){
int tmp = a;
a = b;
b = tmp;
}

10
References (cont.)
reference can be used to return values
• in which case function can be used on the left-hand side of
assignment
int& getElement(int x[], int i) {
return x[i];
}

...
int a[] = {10, 20, 30};

cout << getElement(a, 1);


getElement(a, 2) = 55;

• careful with returning local function variables by reference: they are


destroyed when function returns, why?

11
Pointers and Functions
function may also return a pointer
int* getElement(int x[], int i) {
return &x[i];
}

...
int a[] = {10, 20, 30};
cout << *getElement(a, 2);
*getElement(a, 5) = 55;

dereferenced pointer is an lvalue

12
nullptr
• nullptr – null pointer constant (C++11 addition)
– is of type pointer unlike NULL and 0, which are integer type
• what’s wrong with NULL and zero?
void myFunc(int); // overloaded function
void myFunc(char *);

func(NULL); // invokes first function

• use nullptr to signify uninitialized pointer

13
Strings

• what is the difference between c-style and C++ style strings?


• how to convert c-style <-> c++-style string?
• what is argc argv ?
• what is concatentation?
• what do find() substr() insert(), replace(), erase() do?
• what is the difference between
void myfunc(string);
void myfunc(string &) and
void myfunc(const string&);

14
Static Variables
• static variables are initialized only once and retain their value across function
invocations
void login() {
static int number1 = 0;
int number2 = 0;
++number1; ++number2;
cout << number1 << number2;
}

int main(){
login();
login();
login();
}
• prints 112131

15

You might also like