net
www.bssskillmission.in
N
I
.
E
C++
(&
C)
Grab
Bag
V
S
S
.B
www.onlineeducation.bharatsevaksamaj.net
www.bssskillmission.in
N
I
.
Final Project:
Due in 2 Days
E
V
S
Complete
Something
S
.B
W
W
www.onlineeducation.bharatsevaksamaj.net
www.bssskillmission.in
N
I
.
E
Parent
destructors
V
S
S
.B
www.onlineeducation.bharatsevaksamaj.net
www.bssskillmission.in
struct Buffer {
Buffer(int s) { buf = new char[s]; }
~Buffer() { delete [] buf; }
char *buf;
};
struct FBuffer : Ipublic
Buffer {
N
.
E : Buffer(s) {
FBuffer(int Vs)
S
f = fopen("file",
"w");
S
B
.
}
W
W
~FBuffer()
{
fclose(f);
}
W
void write() { fwrite(buf, 1, 40, f); }
FILE *f;
};
4
www.onlineeducation.bharatsevaksamaj.net
www.bssskillmission.in
struct FBuffer
: public Buffer {
FBuffer(int s);
~FBuffer();
void write();
FILE *f;
};
struct Buffer {
Buffer(int s);
~Buffer();
char *buf;
};
N
I
.
E
V
S
S
.B
W
delete buf;
//
www.onlineeducation.bharatsevaksamaj.net
www.bssskillmission.in
struct FBuffer
: public Buffer {
FBuffer(int s);
~FBuffer();
void write();
FILE *f;
};
struct Buffer {
Buffer(int s);
~Buffer();
char *buf;
};
N
I
.
E
V
S
S
.B
FBuffer
W
delete fbuf;
//
www.onlineeducation.bharatsevaksamaj.net
www.bssskillmission.in
Construction
Buer
N
I
(buf)
.
E
V
S
S
Uninitialized
.B
W
W
W
Uninitialized
Buer
(buf)
FBuer
(f)
www.onlineeducation.bharatsevaksamaj.net
www.bssskillmission.in
Destruction
Buer
(buf)
Buer
N
I
(buf)
.
E
V
S
S
.B
Uninitialized
W
FBuer
(f)
Uninitialized
www.onlineeducation.bharatsevaksamaj.net
www.bssskillmission.in
struct FBuffer
: public Buffer {
FBuffer(int s);
~FBuffer();
void write();
FILE *f;
};
struct Buffer {
Buffer(int s);
~Buffer();
char *buf;
};
N
I
.
E
V
S
S
.B
W
delete fbuf;
www.onlineeducation.bharatsevaksamaj.net
10
www.bssskillmission.in
struct FBuffer
struct Buffer {
: public Buffer {
Buffer();
FBuffer();
virtual ~Buffer(); virtual ~FBuffer();
char *buf;
void write();
};
FILE *f;
IN };
.
E
V
S
S
.B
W
delete fbuf;
//
10
www.onlineeducation.bharatsevaksamaj.net
11
www.bssskillmission.in
N
I
.
E
C++
Casts
V
S
S
.B
11
www.onlineeducation.bharatsevaksamaj.net
12
www.bssskillmission.in
// C cast
// C-style cast
float b = 98.6;
int a = int(b);
N
I
.
E
V
S
S
.B
12
www.onlineeducation.bharatsevaksamaj.net
13
www.bssskillmission.in
class Cat { };
I
.
E
V
S
S
.B
Cat
Tiger
Persian
13
www.onlineeducation.bharatsevaksamaj.net
14
www.bssskillmission.in
// valid up-cast
N
I
.
Cat *c3 = dynamic_cast<Cat
*>(t);
V
S
S
.B
14
www.onlineeducation.bharatsevaksamaj.net
15
www.bssskillmission.in
N
I
.
Tiger *t3 = dynamic_cast<Tiger
*>(c);
V
S
S
.B
// compile
error
15
www.onlineeducation.bharatsevaksamaj.net
16
www.bssskillmission.in
// valid down-cast
N
I
.
Cat *c = new Tiger;
E
V
S
S
B
.
Tiger *t1
=
(Tiger
*)c;
W
Tiger W
*t2 = static_cast<Tiger *>(c);
W
Tiger *t3 = dynamic_cast<Tiger *>(c);
16
www.onlineeducation.bharatsevaksamaj.net
17
www.bssskillmission.in
// invalid down-cast
Cat *c = new Persian;
N
I
.
Tiger *t3 = dynamic_cast<Tiger
*>(c);
V
S
S
.B
// t1 & W
t2 are invalid pointers
// t3 W
is NULL
17
www.onlineeducation.bharatsevaksamaj.net
18
www.bssskillmission.in
N
I
.
E
References
V
S
S
.B
18
www.onlineeducation.bharatsevaksamaj.net
19
www.bssskillmission.in
V
S
S
.B
int main() {
W
W int x = 2, y = 3;
W swap(&x, &y);
}
19
www.onlineeducation.bharatsevaksamaj.net
20
www.bssskillmission.in
V
S
S
.B
int main() {
W
W int x = 2, y = 3;
W swap(x, y);
}
20
www.onlineeducation.bharatsevaksamaj.net
21
www.bssskillmission.in
N
I
.
E
Hello,
World!
V
S
S
.B
21
www.onlineeducation.bharatsevaksamaj.net
22
www.bssskillmission.in
#include <iostream>
N
int main() {
I
.
E
std::cout
<< "Hello, World!"
V
S
S
<<
std::endl;
B
.
W
return
0;
W
W}
22
www.onlineeducation.bharatsevaksamaj.net
23
www.bssskillmission.in
#include <iostream>
N
int main() {
I
.
E
std::cout
<< "Hello, World!"
V
S
S
<<
std::endl;
B
.
W
return
0;
W
W}
23
www.onlineeducation.bharatsevaksamaj.net
24
www.bssskillmission.in
N
I
.
E
Namespaces
V
S
S
.B
24
www.onlineeducation.bharatsevaksamaj.net
25
www.bssskillmission.in
N
I
.
E
V
S
S
.B
25
www.onlineeducation.bharatsevaksamaj.net
26
www.bssskillmission.in
N
I
.
E
V
S
S
.B
26
www.onlineeducation.bharatsevaksamaj.net
27
www.bssskillmission.in
namespace sf {
SNDFILE *open(const char *);
count_t seek(SNDFILE *, count_t);
int error(SNDFILE *);
}
N
I
.
E
V
S
S
.B
27
www.onlineeducation.bharatsevaksamaj.net
28
www.bssskillmission.in
#include <iostream>
N
int main() {
I
.
E
std::cout
<< "Hello, World!"
V
S
S
<<
std::endl;
B
.
W
return
0;
W
W}
28
www.onlineeducation.bharatsevaksamaj.net
29
www.bssskillmission.in
S
S
.B
W std::cout;
using
W
Wusing std::endl;
cout << "Hello, World!"
<< endl;
29
www.onlineeducation.bharatsevaksamaj.net
30
www.bssskillmission.in
g++ -E hello.cpp
iostream
namespace std {
N
extern
istream cin;
I
.
E
extern
ostream cout;
V
S
S
extern
ostream
cerr;
B
.
W}
30
www.onlineeducation.bharatsevaksamaj.net
31
www.bssskillmission.in
namespace std {
N
extern
istream cin;
I
.
E
extern
ostream cout;
V
S
S
extern
ostream
cerr;
B
.
class ActionLawsuit {
};
31
www.onlineeducation.bharatsevaksamaj.net
32
www.bssskillmission.in
N
extern
istream cin;
I
.
E
extern
ostream cout;
V
S
S
extern
ostream
cerr;
B
.
class ActionLawsuit {
};
32
www.onlineeducation.bharatsevaksamaj.net
33
www.bssskillmission.in
namespace super {
namespace std {
N
extern
istream cin;
I
.
E
extern
ostream cout;
V
S
S
extern
ostream
cerr;
B
.
class ActionLawsuit {
};
super::std::ActionLawsuit;
www.onlineeducation.bharatsevaksamaj.net
34
www.bssskillmission.in
N
I
.
E
extern
V
S
S
.B
34
www.onlineeducation.bharatsevaksamaj.net
35
www.bssskillmission.in
iostream
namespace std {
N
extern
istream cin;
I
.
E
extern
ostream cout;
V
S
S
extern
ostream
cerr;
B
.
W}
35
www.onlineeducation.bharatsevaksamaj.net
36
www.bssskillmission.in
iostream
ostream cout;
main.c
foo.c
N
I
.
E
V
#include <iostream>
S
#include <iostream>
W {
int main()
W
W << "i";
cout
foo();
}
int foo() {
cout << "Phone";
}
S
.B
36
www.onlineeducation.bharatsevaksamaj.net
37
www.bssskillmission.in
ostream cout;
ostream cout;
int main() {
cout << "i";
foo();
N
I
.
E
}
V
int foo() {
cout << "Phone";
}
S
S
.B
main.o W
foo.o
cout
cout
main
foo
37
www.onlineeducation.bharatsevaksamaj.net
38
www.bssskillmission.in
int main() {
cout << "i";
foo();
N
I
.
E
}
V
int foo() {
cout << "Phone";
}
S
S
.B
main.o W
foo.o
main
foo
<standard library>
cout
38
www.onlineeducation.bharatsevaksamaj.net
39
www.bssskillmission.in
#include <iostream>
N
int main() {
I
.
E
std::cout
<< "Hello, World!"
V
S
S
<<
std::endl;
B
.
W
return
0;
W
W}
39
www.onlineeducation.bharatsevaksamaj.net
40
www.bssskillmission.in
#include <iostream>
N
int main() {
I
.
E
std::cout
<< "Hello, World!"
V
S
S
<<
std::endl;
B
.
W a = 2 << 1;
int
Wreturn 0;
W
}
40
www.onlineeducation.bharatsevaksamaj.net
41
www.bssskillmission.in
N
I
.
E
Operator
Overloading
V
S
S
.B
41
www.onlineeducation.bharatsevaksamaj.net
42
www.bssskillmission.in
struct vec2 {
vec2(float x, float y)
: x(x), y(y) { }
float x, y;
};
N
I
.
E
int main() V{
S
S
vec2 .a(1,
0);
B
W b(1, 3);
vec2
W
Wvec2 c = a + b; // compile error
}
vec.cpp: In function int main():
42
www.onlineeducation.bharatsevaksamaj.net
43
www.bssskillmission.in
43
www.onlineeducation.bharatsevaksamaj.net
44
www.bssskillmission.in
44
www.onlineeducation.bharatsevaksamaj.net
45
www.bssskillmission.in
45
www.onlineeducation.bharatsevaksamaj.net
a
a
a
a
a
a
a
a
a
a
46
www.bssskillmission.in
+ b
a != b
- b
a && b
* b
a || b
/ b
a & b
% b
a | b
< b
a ^ Nb
I
.
<= b
aE<< b
V
S
== b
a >> b
S
B
.
>= b
a,
b
W
>W
b
a[b]
46
www.onlineeducation.bharatsevaksamaj.net
47
www.bssskillmission.in
+a
-a
++a
a++
--a
a-N
I
.
!a
E
V
S
~a
S
B
.
*a
W
&a W
vec2 operator+();
47
www.onlineeducation.bharatsevaksamaj.net
a
a
a
a
a
a
48
www.bssskillmission.in
= b
+= b
-= b
*= b
/= b
%= b
a
a
a
a
a
a
&= b
|= b
^= b
<<= b
>>= b
= N(b += c)
I
.
E
V
S
S
.B
www.onlineeducation.bharatsevaksamaj.net
49
www.bssskillmission.in
N
I
.
E
Streams
V
S
S
.B
49
www.onlineeducation.bharatsevaksamaj.net
50
www.bssskillmission.in
struct Foo {
char *str() const {
return "Foo!";
}
};
N
ostream &
I
.
E
operator<<(ostream
&os, const Foo &f) {
V
S
S
return os
<<
f.str();
B
.
W
}
W
int main() {
Foo f;
std::cout << f << std::endl;
}
50
www.onlineeducation.bharatsevaksamaj.net
www.bssskillmission.in
MIT OpenCourseWare
http://ocw.mit.edu
For information about citing these materials or our Terms of Use, visit: http://ocw.mit.edu/terms.
N
I
.
E
V
S
S
.B
51
www.onlineeducation.bharatsevaksamaj.net
www.bssskillmission.in
N
I
.
E
Lecture
8:
V
S
S
Last
Lecture
B
.
Helter
W Skelter Fun!
52
www.onlineeducation.bharatsevaksamaj.net
www.bssskillmission.in
Today
Crazay Const
Exceptions
Function pointers
N
I
.
E
V
S
S
.B
53
www.onlineeducation.bharatsevaksamaj.net
www.bssskillmission.in
Today
Standard Template Library (STL)
Crazay Const
Exceptions
Function pointers
N
I
.
E
V
S
S
.B
54
www.onlineeducation.bharatsevaksamaj.net
www.bssskillmission.in
Included w/ compiler
Contains containers/data structures, iterators,
and algorithms
http://www.cplusplus.com/reference
N
I
.
E
V
S
S
.B
55
www.onlineeducation.bharatsevaksamaj.net
www.bssskillmission.in
Vectors
std::vector<int> int_list;
int_list.push_back(1);
N
I
.
E
V
S
int tmp = int_list[0]; //
tmp = 1
S
B
.
int_list.pop_back(); // int_list now empty
W
W
W
www.bsscommunitycollege.in www.bssnewgeneration.in www.bsslifeskillscollege.in
56
www.onlineeducation.bharatsevaksamaj.net
57
www.bssskillmission.in
Map
00
John Smith
01
521-8976
02
521-1234
03
Lisa Smith
13
Sandra Dee
14
521-9655
15
#include <map>
Keys
Hash
Function
Buckets
letter_to_int['a'] = 1;
N
I
.
E
V
letter_to_int['b'] = 2;
S
S
B
.
int pos = letter_to_int['a'] // pos = 1;
W
W
W
www.onlineeducation.bharatsevaksamaj.net
www.bssskillmission.in
Others Containers
N
I
.
E
V
S
S
.B
58
www.onlineeducation.bharatsevaksamaj.net
www.bssskillmission.in
Iterators
N
I
.
E
V
S
S
.B
59
www.onlineeducation.bharatsevaksamaj.net
www.bssskillmission.in
Vector Iterators
#include <vector>
#include <iostream>
...
std::vector<int> vec;
vec.push_back(i);
N
I
.
E
S
.B
W
1 2 3 4 5
//Will print:W
W
}
V
S
60
www.onlineeducation.bharatsevaksamaj.net
www.bssskillmission.in
Cool/Useful Algorithm
#include <algorithm>
Sort a vector:
Reverse a vector:
std::reverse(vec.begin(), vec.end());
Min/Max:
std::sort(vec.begin(), vec.end());
N
I
.
E
V
S
std::min(3,1) == 1 ; std::max(3,1) == 3
S
So many more online!
.B
W
W
W
61
www.onlineeducation.bharatsevaksamaj.net
www.bssskillmission.in
Today
Crazay Const
Exceptions
Function pointers
N
I
.
E
V
S
S
.B
62
www.onlineeducation.bharatsevaksamaj.net
www.bssskillmission.in
Const Madness!
// Const int
N
I
.
E
V
int const * c2; // Same
as c1
S
S
.B
W
int * constW
c3; // Const pointer to variable int
W
www.bsscommunitycollege.in www.bssnewgeneration.in www.bsslifeskillscollege.in
63
www.onlineeducation.bharatsevaksamaj.net
www.bssskillmission.in
N
I
.
E
V
S
bool catch_change_this()
const {
S
B
.
...
W
}
W
W
64
www.onlineeducation.bharatsevaksamaj.net
www.bssskillmission.in
N
I
.
E
V
S
S
.B
65
www.onlineeducation.bharatsevaksamaj.net
www.bssskillmission.in
Today
Standard Template Library (STL)
Crazay Const
Exceptions
Function pointers
N
I
.
E
V
S
S
.B
66
www.onlineeducation.bharatsevaksamaj.net
www.bssskillmission.in
Exceptions
N
I
.
E
V
S
S
.B
67
www.onlineeducation.bharatsevaksamaj.net
www.bssskillmission.in
Exceptions
std::runtime_error
std::bad_alloc
std::bad_cast
N
I
const char * what() const { E.
V
S
return "MyException";
// human-readable
S
.B
}
W
};
W
W
www.bsscommunitycollege.in www.bssnewgeneration.in www.bsslifeskillscollege.in
68
www.onlineeducation.bharatsevaksamaj.net
www.bssskillmission.in
Try Catch
try {
// Protected code
throw MyError();
}catch( YourError e1 ){
cout << e1.what() << endl;
N
I
.
E
}catch( MyError e2 ){
V
S
S
.B
}catch(...) {
69
www.onlineeducation.bharatsevaksamaj.net
www.bssskillmission.in
N
I
.
E
V
S
throw MyException();
S
.B
}catch(MyException & e) {
70
www.onlineeducation.bharatsevaksamaj.net
www.bssskillmission.in
Functions Throwing
N
I
void blahh(int i) throw(int) { .
E
V
//This function may throw
int if there's an error
S
S
}
.B
W
W
W
www.bsscommunitycollege.in www.bssnewgeneration.in www.bsslifeskillscollege.in
71
www.onlineeducation.bharatsevaksamaj.net
www.bssskillmission.in
Today
Standard Template Library (STL)
Crazay Const
Exceptions
Function pointers
N
I
.
E
V
S
S
.B
72
www.onlineeducation.bharatsevaksamaj.net
www.bssskillmission.in
Functions Pointers
N
I
.
E
V
S
S
.B
73
www.onlineeducation.bharatsevaksamaj.net
www.bssskillmission.in
Functions Pointers
N
I
.
E
V
S
S
.B
74
www.onlineeducation.bharatsevaksamaj.net
www.bssskillmission.in
#include <iostream>
void my_int_func(int x){
std::cout << x << std::endl;
}
int main(){
void (*foo)(int);
N
I
.
(*foo)(2); // Calls my_int_func E
V
foo(2); // Same as above line
S
S
return 0;
B
.
}
W
W
W
75
www.onlineeducation.bharatsevaksamaj.net
www.bssskillmission.in
#include <iostream>
N
I
.
E
int main(){
void (*foo)(int);
V
S
foo = call;
S
.B
call_me_maybe(911, foo);
return 0;
76
www.onlineeducation.bharatsevaksamaj.net
www.bssskillmission.in
#include <iostream>
void call(int x){
std::cout << x << std::endl;
}
void call_me_maybe(int number, void (*call_func)(int)) {
call_func(number);
N
I
.
E
V
S
int main(){
S
.B
call_me_maybe(911, call);
return 0;
}
77
www.onlineeducation.bharatsevaksamaj.net
www.bssskillmission.in
For_each
#include <algorithm> // Header file need for for_each()
#include <vector>
#include <iostream>
int main(){
N
I
.
E
vector<int> myvector;
myvector.push_back(10);
V
S
myvector.push_back(20);
S
.B
W
} // Prints W
out 10 20
W
...
78
www.onlineeducation.bharatsevaksamaj.net
www.bssskillmission.in
Today
Standard Template Library (STL)
Crazay Const
Exceptions
Function pointers
N
I
.
E
V
S
S
.B
79
www.onlineeducation.bharatsevaksamaj.net
www.bssskillmission.in
C++11
N
I
.
E
int x = 1;
auto y = x;
V
S
S
.B
vector<int> vec;
80
www.onlineeducation.bharatsevaksamaj.net
www.bssskillmission.in
C++11
N
I
.
E
V
S
S
.B
81
www.onlineeducation.bharatsevaksamaj.net
www.bssskillmission.in
C++11
Before C++11:
N
I
.
E
C++11:
V
S
vector<vector<int>>
vector_of_int_vectors;
S
.B
W
W
W
www.bsscommunitycollege.in www.bssnewgeneration.in www.bsslifeskillscollege.in
82
www.onlineeducation.bharatsevaksamaj.net
www.bssskillmission.in
C++11
N
I
.
E
vec.push_back( 1 );
vec.push_back( 2 );
V
S
S
.B
83
www.onlineeducation.bharatsevaksamaj.net
www.bssskillmission.in
C++11
Ex:
#include <iostream>
int main(){
auto func = [] (int i) { cout << "Hi " << i << endl; };
func(1); // now call the function
}
N
I
.
E
V
S
S
.B
84
www.onlineeducation.bharatsevaksamaj.net
www.bssskillmission.in
C++11
\(^_^) /
Yay!!!
N
I
.
E
Reference:
V
S
http://www.cprogramming.com/tutorial.html#c++11
S
.B
http://en.wikipedia.org/wiki/C%2B%2B11
85
www.onlineeducation.bharatsevaksamaj.net
www.bssskillmission.in
N
I
.
E
V
S
S
.B
86
www.onlineeducation.bharatsevaksamaj.net
www.bssskillmission.in
MIT OpenCourseWare
http://ocw.mit.edu
For information about citing these materials or our Terms of Use, visit: http://ocw.mit.edu/terms.
N
I
.
E
V
S
S
.B
87
www.onlineeducation.bharatsevaksamaj.net
www.bssskillmission.in
N
I
.
E
C++
Inheritance
V
S
S
.B
88
www.onlineeducation.bharatsevaksamaj.net
www.bssskillmission.in
N
I
.
E
Bits
&
Bobs
V
S
S
.B
89
www.onlineeducation.bharatsevaksamaj.net
90
www.bssskillmission.in
int x;
int y;
int
int
pt
pt.x
N
pt.y
I
.
struct {
int x;
E
int y;
V
S
S
} pt;
B
int
int
W
union {
int x;
int y;
} pt;
pt
pt.x
pt.y
int
int
www.onlineeducation.bharatsevaksamaj.net
91
www.bssskillmission.in
foo
foo.x
N
foo.y
I
.
union {
struct {
int a;
E
char b;
V
S
S
} x;
.B
W
foo.x.a
intWy;
W
} foo;
foo.x.b
int
char
int
www.onlineeducation.bharatsevaksamaj.net
www.bssskillmission.in
N
I
.
E
Why
Inheritance?
V
S
S
.B
92
www.onlineeducation.bharatsevaksamaj.net
93
www.bssskillmission.in
struct Circle {
int x, y;
int radius;
void draw();
};
struct Square {
int x, y;
int width;
void draw();
};
N
I
.
E
V
S
S
.B
www.onlineeducation.bharatsevaksamaj.net
94
www.bssskillmission.in
struct Circle {
int x, y;
int radius;
void draw();
};
struct Square {
int x, y;
int width;
void draw();
};
N
I
.
E
Circle *circles[nc];
V
S
S
Square *squares[ns];
.B
www.onlineeducation.bharatsevaksamaj.net
95
www.bssskillmission.in
struct Circle {
int x, y;
int radius;
void draw();
};
struct Square {
int x, y;
int width;
void draw();
};
N
I
.
E
Circle *circles[nc];
V
S
S
Square *squares[ns];
.B
www.onlineeducation.bharatsevaksamaj.net
www.bssskillmission.in
Circle *circles[nc];
Square *squares[ns];
S
S
.B
96
www.onlineeducation.bharatsevaksamaj.net
97
www.bssskillmission.in
struct Circle {
int x, y;
int radius;
void draw();
};
?
N
I
.
E
Shape *shapes[ns];
V
S
struct Square {
int x, y;
int width;
void draw();
};
?
S
.B
W
for(int
W i = 0; i < ns; i++)
W
shapes[i].draw();
for(int i = 0; i < ns; i++)
delete shapes[i];
www.bsscommunitycollege.in www.bssnewgeneration.in www.bsslifeskillscollege.in
www.onlineeducation.bharatsevaksamaj.net
www.bssskillmission.in
N
I
.
E
Inheritance
V
S
S
.B
98
www.onlineeducation.bharatsevaksamaj.net
www.bssskillmission.in
99
class Shape {
public:
virtual void draw() = 0;
};
class Circle : public Shape {
private:
N
I
.
int x, y;
E
V
S
int radius;
S
public: .B
W
virtual
W void draw();
}; W
void Circle::draw() {
...
}
www.bsscommunitycollege.in www.bssnewgeneration.in www.bsslifeskillscollege.in
e
c
i
ct
www.onlineeducation.bharatsevaksamaj.net
www.bssskillmission.in
N
I
1)ESubclassing
.
V
S
S 2) virtual
.B
100
www.onlineeducation.bharatsevaksamaj.net
www.bssskillmission.in
N
I
1)ESubclassing
.
V
S
S 2) virtual
.B
101
www.onlineeducation.bharatsevaksamaj.net
www.bssskillmission.in
1) Subclassing
N
I
.
E
V
S
S
.B
inherit
behavior
from
the
parent
W
102
www.onlineeducation.bharatsevaksamaj.net
www.bssskillmission.in
class Shape {
public:
void draw();
};
.B
W
int main()
{
W
W
Circle
circle;
}
circle.draw();
103
www.onlineeducation.bharatsevaksamaj.net
Shape
void draw()
N
I
.
E
V
S
S
.B
104
www.bssskillmission.in
void draw()
int getRadius()
www.onlineeducation.bharatsevaksamaj.net
www.bssskillmission.in
1) Subclassing
N
I
.
E
V
S
S
.B
inherit
elds
from
the
parent
W
105
www.onlineeducation.bharatsevaksamaj.net
www.bssskillmission.in
class Shape {
public:
int x, y;
};
.B
W
int main()
{
W
W
Circle
circle;
}
circle.x = 5;
106
www.onlineeducation.bharatsevaksamaj.net
Shape
int x
N
I
.
E
V
S
S
int .y
107
www.bssskillmission.in
int x
int y
int radius
www.onlineeducation.bharatsevaksamaj.net
www.bssskillmission.in
Shape
int x
E
V
S
S
.B
int y
N
.I
int radius
is-a or has-a?
www.bsscommunitycollege.in www.bssnewgeneration.in www.bsslifeskillscollege.in
108
Circle
www.onlineeducation.bharatsevaksamaj.net
109
www.bssskillmission.in
class Circle
: public Shape {
N
public:
I
.
int radius; VE
S
S
};
.B
class Circle {
public:
Shape shape;
int radius;
};
www.onlineeducation.bharatsevaksamaj.net
110
www.bssskillmission.in
class Circle
: public Shape {
N
public:
I
.
int radius; VE
S
S
};
.B
class Circle {
public:
Shape shape;
int radius;
};
W
circle.x;
W
circle.shape.x;
www.onlineeducation.bharatsevaksamaj.net
www.bssskillmission.in
1) Subclassing
N
I
.
E
V
S
S
.B
public/protected/private
elds
W
111
www.onlineeducation.bharatsevaksamaj.net
112
www.bssskillmission.in
class Shape {
public:
int x;
private:
int y;
};
only accessible in
Shape class
N
I
.
void Circle::foo()
E
V
S
printf("%d",
x);
S
.B
printf("%d",
y);
W
}
W
W
{
// compile error
www.onlineeducation.bharatsevaksamaj.net
113
www.bssskillmission.in
class Shape {
public:
int x;
protected:
int y;
};
N
I
.
void Circle::foo()
{
E
V
S
printf("%d",
x);
S
.B
printf("%d",
y);
W
}
W
W
int main() {
Circle circle;
circle.x = 0; // compile error
}
www.bsscommunitycollege.in www.bssnewgeneration.in www.bsslifeskillscollege.in
www.onlineeducation.bharatsevaksamaj.net
www.bssskillmission.in
1) Subclassing
N
I
.
E
V
S
S
.B
public/protected/private
inheritance
W
114
www.onlineeducation.bharatsevaksamaj.net
www.bssskillmission.in
class Shape {
public:
void draw();
};
I
.
E
V
S
S
.B
115
www.onlineeducation.bharatsevaksamaj.net
www.bssskillmission.in
class Shape {
public:
void draw();
};
I
.
E
V
S
S
.B
116
www.onlineeducation.bharatsevaksamaj.net
www.bssskillmission.in
class Shape {
public:
void draw();
};
.B
W
The W
inheritance is protected.
117
www.onlineeducation.bharatsevaksamaj.net
www.bssskillmission.in
class Shape {
public:
void draw();
};
.B
W
The W
inheritance is private.
118
www.onlineeducation.bharatsevaksamaj.net
www.bssskillmission.in
N
I
.
private
inheritance:
E
V
S
is-a
or
has-a
S
.B
119
www.onlineeducation.bharatsevaksamaj.net
www.bssskillmission.in
1) Subclassing
N
I
.
E
V
S
S
.B
multiple
inheritance
W
120
www.onlineeducation.bharatsevaksamaj.net
www.bssskillmission.in
class Color {
};
class Mood {
};
IN
.
E
V
S
virtual
W
this->Color::print();
this->Mood::print();
}
};
www.bsscommunitycollege.in www.bssnewgeneration.in www.bsslifeskillscollege.in
121
www.onlineeducation.bharatsevaksamaj.net
122
www.bssskillmission.in
1) Subclassing
N
I
.
E
V
S
S
.B
slicing
www.onlineeducation.bharatsevaksamaj.net
www.bssskillmission.in
struct Cow {
void speak() {
printf("Moo.\n");
}
};
N
struct Werecow
: public Cow {
I
.
E
bool transformed;
V
S
S
void
speak()
{
B
.
Wif (transformed)
W
printf("Aaooooh!\n");
W
else
printf("Moo.\n");
}
};
www.bsscommunitycollege.in www.bssnewgeneration.in www.bsslifeskillscollege.in
123
www.onlineeducation.bharatsevaksamaj.net
www.bssskillmission.in
Werecow wcow;
wcow.transformed = true;
Cow cows[2];
cows[0] = Cow();
cows[1] = wcow;
N
I
.
E
for (int
i = 0; i < 2; i++)
V
S
S
cows[i].speak();
.B
W
wcow.speak();
// Output:
Moo.
//
//
Moo.
//
Aaooooh!
www.bsscommunitycollege.in www.bssnewgeneration.in www.bsslifeskillscollege.in
124
www.onlineeducation.bharatsevaksamaj.net
www.bssskillmission.in
Werecow bev;
bev.transformed
=
true;
I
.
E
V
S
poke(judy);
S
.B
poke(bev);
W
bev.speak();
// Output:
//
Moo.
//
Moo.
Aaooooh!
//
www.bsscommunitycollege.in www.bssnewgeneration.in www.bsslifeskillscollege.in
125
www.onlineeducation.bharatsevaksamaj.net
Cow
N
I
.
E
V
S
S
.B
126
www.bssskillmission.in
Werecow
bool transformed
www.onlineeducation.bharatsevaksamaj.net
www.bssskillmission.in
N
I
Use
pointers
.
E
V
S
Use
virtual
S
.B
127
www.onlineeducation.bharatsevaksamaj.net
www.bssskillmission.in
N
I
1)ESubclassing
.
V
S
S 2) virtual
.B
128
www.onlineeducation.bharatsevaksamaj.net
www.bssskillmission.in
class Shape {
public:
void draw() { printf("shape\n"); }
};
class Circle : public Shape {
public:
N
I
void draw() {E.printf("circle\n"); }
V
S
};
S
.B
129
www.onlineeducation.bharatsevaksamaj.net
www.bssskillmission.in
class Shape {
public:
void draw() { printf("shape\n"); }
};
class Circle : public Shape {
public:
N
I
void draw() {E.printf("circle\n"); }
V
S
};
S
.B
W
CircleW*circle = new Circle;
W
circle->draw();
// "circle"
130
www.onlineeducation.bharatsevaksamaj.net
www.bssskillmission.in
class Shape {
public:
void draw() { printf("shape\n"); }
};
class Circle : public Shape {
public:
N
I
void draw() {E.printf("circle\n"); }
V
S
};
S
.B
W
Shape W
*shape =
W
shape->draw();
new Circle;
// "shape"
131
www.onlineeducation.bharatsevaksamaj.net
www.bssskillmission.in
class Shape {
public:
void draw() { printf("shape\n"); }
};
class Circle : public Shape {
public:
N
I
void draw() {E.printf("circle\n"); }
V
S
};
S
.B
W
Shape W
*shape =
W
shape->draw();
new Circle;
// "shape"
draw() is non-virtual,
so its compiled like a C call
www.bsscommunitycollege.in www.bssnewgeneration.in www.bsslifeskillscollege.in
132
www.onlineeducation.bharatsevaksamaj.net
www.bssskillmission.in
determined at compile-time
class Cat {
public:
void yawn(int
duration);
N
I
.
};
E
V
S
S
.B
W
cat.yawn(4);
Wpcat->yawn(4);
133
www.onlineeducation.bharatsevaksamaj.net
www.bssskillmission.in
134
class Cat {
public:
virtual void Nyawn(int duration);
I
.
};
E
V
S
S
.B
Cat cat,
*pcat
=
new
SuperCat;
W
W
cat.yawn(4);
W
pcat->yawn(4);
www.onlineeducation.bharatsevaksamaj.net
www.bssskillmission.in
N
I
non-virtual:
compile-time
.
E
V
S
S
virtual:
run-time
B
.
135
www.onlineeducation.bharatsevaksamaj.net
www.bssskillmission.in
2) N
virtual
I
.
E
V
S
S
.B
pure
virtual
methods
W
136
www.onlineeducation.bharatsevaksamaj.net
www.bssskillmission.in
137
class Shape {
public:
N
I
int main()
{
.
E
V
Shape
shape;
S
S
}
.B
W
pure.cpp:1: note:
because the following virtual functions are pure within Shape:
www.onlineeducation.bharatsevaksamaj.net
www.bssskillmission.in
class Drawable {
public:
virtual void draw() = 0;
};
class Fish : public Drawable {
public:
N
I
.
virtual void
draw();
E
V
S
};
S
.B
W
intWmain()
WDrawable
{
*drawables[3];
drawables[0] = new Fish;
drawables[1] = new Salami;
drawables[2] = new JackSparrow;
www.bsscommunitycollege.in www.bssnewgeneration.in www.bsslifeskillscollege.in
138
www.onlineeducation.bharatsevaksamaj.net
www.bssskillmission.in
2) N
virtual
I
.
E
V
S
S
.B
destructors
139
www.onlineeducation.bharatsevaksamaj.net
www.bssskillmission.in
class Fish {
public:
Fish() {
gills[0] = new Gill;
N
I
gills[1]
=
new
Gill;
.
E
} SV
S
B
~Fish() {
.virtual
W delete gills[0];
W
W
delete gills[1];
}
private:
Gill *gills[2];
};
www.bsscommunitycollege.in www.bssnewgeneration.in www.bsslifeskillscollege.in
140
www.onlineeducation.bharatsevaksamaj.net
www.bssskillmission.in
2) N
virtual
I
.
E
V
S
S
.B
virtual inheritance
141
www.onlineeducation.bharatsevaksamaj.net
142
www.bssskillmission.in
class Goofball {
int x;
};
class Stupid : public Goofball { };
class Dumb : public Goofball { };
N
I
.
E
Oops
Stupid::x
Dumb::x
www.onlineeducation.bharatsevaksamaj.net
www.bssskillmission.in
class Goofball {
int x;
};
class Stupid : public Goofball { };
class Dumb : public Goofball { };
N
I
.
E
int Oops::fail() {
Stupid::x = 1; Dumb::x = 2;
return Stupid::x + Dumb::x; // 3
}
www.bsscommunitycollege.in www.bssnewgeneration.in www.bsslifeskillscollege.in
143
www.onlineeducation.bharatsevaksamaj.net
www.bssskillmission.in
144
class Goofball {
int x;
};
class Stupid : virtual public Goofball { };
class Dumb : virtual public Goofball { };
N
I
.
E
int Oops::fail() {
Stupid::x = 1; Dumb::x = 2;
return Stupid::x + Dumb::x; // 4
}
www.bsscommunitycollege.in www.bssnewgeneration.in www.bsslifeskillscollege.in
www.onlineeducation.bharatsevaksamaj.net
www.bssskillmission.in
N
I
.
E
Conclusion
V
S
S
.B
145
www.onlineeducation.bharatsevaksamaj.net
www.bssskillmission.in
146
class Shape {
public:
virtual void draw() = 0;
};
class Circle : public Shape {
private:
N
I
.
int x, y;
E
V
S
int radius;
S
public: .B
W
virtual
W void draw();
}; W
void Circle::draw() {
...
}
www.bsscommunitycollege.in www.bssnewgeneration.in www.bsslifeskillscollege.in
e
c
i
ct
www.onlineeducation.bharatsevaksamaj.net
www.bssskillmission.in
MIT OpenCourseWare
http://ocw.mit.edu
For information about citing these materials or our Terms of Use, visit: http://ocw.mit.edu/terms.
N
I
.
E
V
S
S
.B
147
www.onlineeducation.bharatsevaksamaj.net
www.bssskillmission.in
N
I
.
E
V
S
S
Lecture 3: C.B
Memory Management
W
W
1
148
www.onlineeducation.bharatsevaksamaj.net
www.bssskillmission.in
Today
Computer Memory
Pointers/Addresses
N
I
.
E
Arrays
V
S
S
.B
Memory Allocation
149
www.onlineeducation.bharatsevaksamaj.net
www.bssskillmission.in
Today
Computer Memory
Pointers/Addresses
N
I
.
E
Arrays
V
S
S
.B
Memory Allocation
150
www.onlineeducation.bharatsevaksamaj.net
www.bssskillmission.in
Heap
Heap is a chunk of memory that users can use to
dynamically allocated memory.
Lasts until freed, or program exits.
N
I
.
E
V
S
S
.B
151
www.onlineeducation.bharatsevaksamaj.net
www.bssskillmission.in
152
Stack
return.
N
I
.
E
V
S
S
.B
www.onlineeducation.bharatsevaksamaj.net
www.bssskillmission.in
Memory Layout
N
I
.
E
V
S
S
.B
153
www.onlineeducation.bharatsevaksamaj.net
www.bssskillmission.in
Call Stack
N
I
.
E
//local variables
V
S
S
.B
...
154
www.onlineeducation.bharatsevaksamaj.net
155
www.bssskillmission.in
Call Stack
Lower address
Example:
void DrawSquare(int i){
int start, end, ...
DrawLine(start, end);
}
N
I
.
E
S
.B
...
}
V
S
Top of Stack
Higher address
www.onlineeducation.bharatsevaksamaj.net
156
www.bssskillmission.in
Call Stack
Lower address
Example:
void DrawSquare(int i){
int start, end, ...
DrawLine(start, end);
}
int end){
//local variables
S
.B
...
V
S
Top of Stack
N
I
.
E
Higher address
www.onlineeducation.bharatsevaksamaj.net
157
www.bssskillmission.in
Call Stack
Lower address
Example:
void DrawSquare(int i){
int start, end, ...
DrawLine(start, end);
}
N
I
.
E
S
.B
...
}
V
S
main() book-keeping
Top of Stack
10
Higher address
www.onlineeducation.bharatsevaksamaj.net
158
www.bssskillmission.in
Call Stack
Lower address
Example:
void DrawSquare(int i){
int start, end, ...
DrawLine(start, end);
Top of Stack
N
I
.
E
S
.B
...
}
V
S
DrawSquare
stack frame
main() book-keeping
11
Higher address
www.onlineeducation.bharatsevaksamaj.net
159
www.bssskillmission.in
Call Stack
Lower address
Example:
void DrawSquare(int i){
Top of Stack
DrawLine(start, end);
N
I
.
E
S
.B
...
}
V
S
DrawSquare
stack frame
main() book-keeping
12
Higher address
www.onlineeducation.bharatsevaksamaj.net
160
www.bssskillmission.in
Call Stack
Lower address
Example:
Top of Stack
DrawSquare book-keeping
DrawLine(start, end);
N
I
.
E
S
.B
...
}
V
S
DrawSquare
stack frame
main() book-keeping
13
Higher address
www.onlineeducation.bharatsevaksamaj.net
161
www.bssskillmission.in
Call Stack
Lower address
Top of Stack
Example:
DrawLine
DrawSquare book-keeping
stack
frame
DrawLine(start, end);
int end){
//local variables
DrawSquare
stack frame
S
.B
...
V
S
main() book-keeping
N
I
.
E
14
Higher address
www.onlineeducation.bharatsevaksamaj.net
162
www.bssskillmission.in
Call Stack
Lower address
Top of Stack
DrawLine
DrawSquare book-keeping
stack
frame
DrawLine(start, end);
int end){
//local variables
DrawSquare
stack frame
S
.B
...
}
V
S
main() book-keeping
N
I
.
E
15
Higher address
www.onlineeducation.bharatsevaksamaj.net
163
www.bssskillmission.in
Call Stack
Lower address
N
I
.
E
S
.B
...
}
V
S
DrawSquare
stack frame
main() book-keeping
16
Higher address
www.onlineeducation.bharatsevaksamaj.net
164
www.bssskillmission.in
Call Stack
Lower address
Top of Stack
N
I
.
E
V
S
DrawSquare
stack frame
S
.B
...
main() book-keeping
17
Higher address
www.onlineeducation.bharatsevaksamaj.net
165
www.bssskillmission.in
Call Stack
Lower address
N
I
.
E
int end){
//local variables
V
S
S
.B
...
Top of Stack
18
Higher address
www.onlineeducation.bharatsevaksamaj.net
www.bssskillmission.in
Today
Computer Memory
Pointers/Addresses
N
I
.
E
Arrays
V
S
S
Memory Allocation
.B
W
W
W
19
166
www.onlineeducation.bharatsevaksamaj.net
www.bssskillmission.in
N
I
.
E
V
S
S
.B
20
167
www.onlineeducation.bharatsevaksamaj.net
168
www.bssskillmission.in
Addresses
N
I
.
E
&X = SSVAddress of X
.B
www.onlineeducation.bharatsevaksamaj.net
www.bssskillmission.in
Pointers
N
I
.
E
V
S
S
.B
22
169
www.onlineeducation.bharatsevaksamaj.net
www.bssskillmission.in
Pointers
N
I
.
E
V
S
S
.B
23
170
www.onlineeducation.bharatsevaksamaj.net
171
www.bssskillmission.in
Description
Character or small
integer.
Size*
Range*
signed: -128 to 127
unsigned: 0 to 255
1byte
2bytes
int
Integer.
4bytes
Long integer.
4bytes
bool
float
double
Double precision
8bytes
floating point number.
long double
N
I
.
E
V
S
S
.B
true or false
8bytes
+/1.7e +/- 308 (~15
www.bsscommunitycollege.in www.bssnewgeneration.in
www.bsslifeskillscollege.in
24
digits)
www.onlineeducation.bharatsevaksamaj.net
www.bssskillmission.in
172
N
I
.
E
V
S
Can use void pointers, just cannot
dereference without casting
S
.B
W
W
W
25
www.onlineeducation.bharatsevaksamaj.net
173
www.bssskillmission.in
Pointer Arithmetic
ptr
a
N
I
.
E
V
S
S
.B
26
www.onlineeducation.bharatsevaksamaj.net
174
www.bssskillmission.in
Pointer Arithmetic
ptr + 1
N
I
.
E
V
S
S
.B
27
www.onlineeducation.bharatsevaksamaj.net
175
www.bssskillmission.in
Pointer Arithmetic
ptr + 1
N
I
.
E
V
S
S
.B
28
www.onlineeducation.bharatsevaksamaj.net
www.bssskillmission.in
Pointer Arithmetic
Can do math on pointers
p1 = p2: sets p1 to the same address as p2
Addition/subtraction:
p1 + c , p1 - c
Increment/decrement:
N
I
.
E
p1++, p1--
V
S
S
.B
29
176
www.onlineeducation.bharatsevaksamaj.net
www.bssskillmission.in
N
I
.
E
Useful for arrays (next topic).
V
S
S
.B
W
W
W
30
177
www.onlineeducation.bharatsevaksamaj.net
www.bssskillmission.in
Today
Computer Memory
Pointers/Addresses
N
I
.
E
Arrays
V
S
S
Memory Allocation
.B
W
W
W
31
178
www.onlineeducation.bharatsevaksamaj.net
www.bssskillmission.in
N
I
.
E
V
S
S
.B
32
179
www.onlineeducation.bharatsevaksamaj.net
www.bssskillmission.in
N
I
.
E
data[0] = 0;
V
S
data[1] = 1;
S
.B
data[2] = 2;
33
180
www.onlineeducation.bharatsevaksamaj.net
www.bssskillmission.in
char *ptr;
char str[10];
N
I
.
E
V
S
S
.B
34
181
www.onlineeducation.bharatsevaksamaj.net
182
www.bssskillmission.in
C-Style Strings
No string data type in C. Instead, a string is
N
I
.
E
\0
V
S
.B
35
www.onlineeducation.bharatsevaksamaj.net
183
www.bssskillmission.in
C-Style Strings
\0
N
I
.
E
V
S
S
.B
36
www.onlineeducation.bharatsevaksamaj.net
www.bssskillmission.in
String functionalities
#include <string.h>
char pointer arguments: char str1[14]
char* strcpy(char* dest, const char* source);
strcpy(str1, hakuna );
N
I
.
strcat(str1, matata); //str1 now
has hakuna matata
E
V
S
S
B
.
More in documentation
W
W
W
char* strcat(char* dest, const char* source);
37
184
www.onlineeducation.bharatsevaksamaj.net
www.bssskillmission.in
Today
Computer Memory
Pointers/Addresses
N
I
.
E
V
S
S
Memory Allocation
.B
W
W
W
38
185
www.onlineeducation.bharatsevaksamaj.net
www.bssskillmission.in
186
Dynamic Allocation
#include <stdlib.h>
sizeof (a C language keyword) returns number
of bytes of a data type.
malloc/realloc finds a specified amount of free
memory and returns a void pointer to it.
char * str = (char *) malloc( 3 * sizeof(char) );
N
I
.
E
strcpy(str, hi);
V
str = (char *) realloc( S
str , 6 * sizeof(char) );
S
.B
strcpy(str, hello);
W
W
W
39
www.onlineeducation.bharatsevaksamaj.net
www.bssskillmission.in
Dynamic Deallocation
#include <stdlib.h>
free declares the memory pointed to by a
N
I
.
E
strcpy(str, hi);
free(str);
V
S
S
.B
40
187
www.onlineeducation.bharatsevaksamaj.net
www.bssskillmission.in
declaration.
N
I
.
dynamic_array = malloc( sizeof(
int ) * 10 );
E
V
Snow points to an array
dynamic_array[0]=1;S//
.B
W
W
W
41
188
www.onlineeducation.bharatsevaksamaj.net
www.bssskillmission.in
Summary
Memory has stack and heap.
Pointers and addresses access memory.
Arrays are really chunks of memory. Strings are
null-terminated char arrays.
N
I
.
C allows user memory allocation.
Use malloc,
E
V
realloc and free.
S
S
.B
W
W
W
42
189
www.onlineeducation.bharatsevaksamaj.net
www.bssskillmission.in
MIT OpenCourseWare
http://ocw.mit.edu
For information about citing these materials or our Terms of Use, visit: http://ocw.mit.edu/terms.
N
I
.
E
V
S
S
.B
190
www.onlineeducation.bharatsevaksamaj.net
www.bssskillmission.in
sort.c
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
// Sort an array A using insertion sort.
// Notice it is passed by reference.
void sort(int *A, int array_size) {
int cur_elem, insert_index;
for (int cur_index = 1; cur_index < array_size; cur_index++) {
cur_elem = *(A+cur_index);
insert_index = cur_index - 1;
// For each element in A, search for where it belong in the subarray
preceeding it's current location
while (insert_index >= 0 && cur_elem < *(A+insert_index)) {
*(A+insert_index+1) = *(A+insert_index);
insert_index -= 1;
}
*(A+insert_index+1) = cur_elem;
}
}
N
I
.
E
int main() {
// Allows us to generate random numbers
srand(time(NULL));
// Read a user input integer and store it in n
int n;
printf("Enter an integer n: ");
scanf("%d", &n);
V
S
S
.B
// Assign each element in the array a random number between 0 and 31,999
for (int i=0; i<n; i++) {
*(array+i) = rand() % 32000; // assigns random numbers
}
191
www.onlineeducation.bharatsevaksamaj.net
www.bssskillmission.in
return 0;
}
resize.c
#include <stdlib.h>
#include <stdio.h>
#include <time.h>
int main() {
// Allows you to generate random number
srand(time(NULL));
// Allows user to specify the original array size, stored in variable n1.
printf("Enter original array size: ");
int n1 = 0;
scanf("%d", &n1);
// Create a new array of n1 ints
int *a1 = malloc(n1 * sizeof(int));
N
I
.
E
// Print each element out (to make sure things look right)
printf("%d ", *(a1+i));
V
S
S
.B
192
www.onlineeducation.bharatsevaksamaj.net
www.bssskillmission.in
MIT OpenCourseWare
http://ocw.mit.edu
For information about citing these materials or our Terms of Use, visit: http://ocw.mit.edu/terms.
N
I
.
E
V
S
S
.B
193
www.onlineeducation.bharatsevaksamaj.net
www.bssskillmission.in
194
6.s096
Introduction to C and C++
N
I
.
E
V
S
S
.B
www.onlineeducation.bharatsevaksamaj.net
www.bssskillmission.in
Why?
N
I
.
E
V
S
S
.B
195
www.onlineeducation.bharatsevaksamaj.net
196
www.bssskillmission.in
N
I
.
E
You.Bseek
performance
S
V
S
www.onlineeducation.bharatsevaksamaj.net
197
www.bssskillmission.in
N
I
.
E
You.Bseek
performance
S
V
S
zero-overhead principle
www.onlineeducation.bharatsevaksamaj.net
198
www.bssskillmission.in
N
I
You seek
to
interface
.
E
V
S
S
B
.
directly
with
hardware
W
W
www.onlineeducation.bharatsevaksamaj.net
199
www.bssskillmission.in
N
I
.
E
That
s
kinda
it
S
.B
V
S
www.onlineeducation.bharatsevaksamaj.net
200
www.bssskillmission.in
N
I
a nice way
to
avoid
writing
.
E
V
S
S
B
.
assembly
language
directly
W
W
W
www.onlineeducation.bharatsevaksamaj.net
www.bssskillmission.in
C++
N
I
respondsVto
the
demands
of
.
E
S
S
B
.
maintaining
large
C
projects
W
W
W
201
www.onlineeducation.bharatsevaksamaj.net
www.bssskillmission.in
202
C++11
N
I
respondsVto
the
demands
of
.
E
S
S
B
.
maintaining
large
C++
projects
W
W
W
www.onlineeducation.bharatsevaksamaj.net
www.bssskillmission.in
N
I
Maintain power
and
flexibility
.
E
V
S
S
B
.
of
W what came before
W
W
203
www.onlineeducation.bharatsevaksamaj.net
www.bssskillmission.in
204
Compilation
Pipeline
Today:
N
I
.
E
V
S
S
.B
www.onlineeducation.bharatsevaksamaj.net
205
www.bssskillmission.in
Source Code
N
I
.
E
V
S
S
.B
Program
www.onlineeducation.bharatsevaksamaj.net
206
www.bssskillmission.in
main.c
prog
int a = 1;
@*)!%
N
I
.
./prog
E
V
S
S
.B
www.onlineeducation.bharatsevaksamaj.net
207
www.bssskillmission.in
main.c
int a = 1;
main2.c .IN
E
V
S
S
int
b
=
2;
B
.
prog
@*)!%
./prog
www.onlineeducation.bharatsevaksamaj.net
www.bssskillmission.in
N
I
$ ./prog
.
E
V
S
S
Hello,
.B World!
W
W
$ W
208
www.onlineeducation.bharatsevaksamaj.net
209
www.bssskillmission.in
N
I
$ ./prog
.
E
V
S
S
Hello,
.B World!
W
W
$ W
E
N
O
D
www.onlineeducation.bharatsevaksamaj.net
210
www.bssskillmission.in
To debug the
sausage,
one
N
I
.
E
V
S
S
mustWsee
how
it
is
made.
B
.
W
Someone, probably
www.onlineeducation.bharatsevaksamaj.net
211
www.bssskillmission.in
Main.java
Main.class
int a = 1;
%!(*@
N
I
.
E
V
S
S
.B
n
i
a
M
a
v
ja
www.onlineeducation.bharatsevaksamaj.net
212
www.bssskillmission.in
Main.java
Main.class
int a = 1;
%!(*@
main.py
main.pyc
N
.I
E
V
S
S
a=1
.B
%!(*@
n
i
a
M
a
v
ja
m
n
o
h
t
py
y
p
.
ain
www.onlineeducation.bharatsevaksamaj.net
213
www.bssskillmission.in
Main.java
Main.class
int a = 1;
%!(*@
main.py
main.pyc
N
.I
E
V
S
S
a=1
.B
n
i
a
M
a
v
ja
y
p
.
ain
%!(*@
m
n
o
h
t
py
main.c W
int a = 1;
int a = 1;
main.o
prog
%!(*@
@*)!%
g
o
r
./p
www.onlineeducation.bharatsevaksamaj.net
www.bssskillmission.in
N
I
.
E
V
S
S
.B
214
www.onlineeducation.bharatsevaksamaj.net
www.bssskillmission.in
N
I
.
E
V
S
S
.B
215
www.onlineeducation.bharatsevaksamaj.net
main.c
int a = 1;
216
www.bssskillmission.in
int a = 1;
main.o
prog
%!(*@
@*)!%
Pre-Process E.IN
V
S
S
.B
Compile
Link
./prog
www.onlineeducation.bharatsevaksamaj.net
main.c
int a = 1;
217
www.bssskillmission.in
int a = 1;
main.o
prog
%!(*@
@*)!%
main2.o
V
S
S
.B
Compile
Link
./prog
www.onlineeducation.bharatsevaksamaj.net
218
www.bssskillmission.in
Pre-Process
N
I
.
E
V
S
S
.B
Compile
Link
www.onlineeducation.bharatsevaksamaj.net
219
www.bssskillmission.in
Pre-Process
N
I
.
E
V
S
S
.B
Compile
Link
www.bsscommunitycollege.in www.bssnewgeneration.in www.bsslifeskillscollege.in
www.onlineeducation.bharatsevaksamaj.net
www.bssskillmission.in
#include
#define
N
I
.
E
V
S
S
.B
#ifdef
220
www.onlineeducation.bharatsevaksamaj.net
www.bssskillmission.in
rimshot.txt
ba-dum chh
joke.txt
N
I
.
E
A man walksVinto
S
S
a bar. Ouch!
.B
W "rimshot.txt"
#include
cpp -P joke.txt
221
www.onlineeducation.bharatsevaksamaj.net
www.bssskillmission.in
output:
a bar. Ouch!
ba-dum chh
N
I
.
E
V
S
S
.B
cpp -P joke.txt
222
www.onlineeducation.bharatsevaksamaj.net
223
www.bssskillmission.in
double.py
N
I
.
fosho double(x):
E
V
S
kthxBx
* 2
S
.
wutz double(6)
W
W
W
cpp -P double.py
www.onlineeducation.bharatsevaksamaj.net
www.bssskillmission.in
output:
def double(x):
return x * 2
print double(6)
N
I
.
E
V
S
S
.B
cpp -P double.py
224
www.onlineeducation.bharatsevaksamaj.net
225
www.bssskillmission.in
output:
def double(x):
return x * 2
print double(6)
S
S
.B
12
AWE
S
N
I
.
E
OME
cpp -P double.py
www.onlineeducation.bharatsevaksamaj.net
www.bssskillmission.in
beer.txt
beer(99)
N
I
.
beer(98)
E
V
beer(97)
BSS
.
...
cpp -P beer.txt
226
www.onlineeducation.bharatsevaksamaj.net
www.bssskillmission.in
beer.txt
beer(99)
N
I
.
beer(98)
E
V
beer(97)
BSS
.
...
cpp -P beer.txt
227
www.onlineeducation.bharatsevaksamaj.net
www.bssskillmission.in
output:
...
I
.
E
V
S
S
.B
cpp -P beer.txt
228
www.onlineeducation.bharatsevaksamaj.net
www.bssskillmission.in
answer.txt
Whats 7 times 6?
#ifdef REVEAL
42
#endif
I
.
E
V
S
S
.B
cpp -P answer.txt
229
www.onlineeducation.bharatsevaksamaj.net
www.bssskillmission.in
output:
Whats 7 times 6?
N
I
.
E
V
S
S
.B
cpp -P answer.txt
230
www.onlineeducation.bharatsevaksamaj.net
www.bssskillmission.in
output:
Whats 7 times 6?
? ??
N
I
.
E
V
S
S
.B
cpp -P answer.txt
231
www.onlineeducation.bharatsevaksamaj.net
www.bssskillmission.in
#define REVEAL
N
I
.
E
V
S
S
.B
cpp -P answer.txt
232
www.onlineeducation.bharatsevaksamaj.net
www.bssskillmission.in
#define REVEAL
or:
N
I
.
E
cpp -P -D REVEAL
answer.txt
V
S
S
.B
cpp -P answer.txt
233
www.onlineeducation.bharatsevaksamaj.net
www.bssskillmission.in
output:
Whats 7 times 6?
42
N
I
.
E
V
S
S
.B
234
www.onlineeducation.bharatsevaksamaj.net
www.bssskillmission.in
answer.txt
Whats 7 times 6?
#ifndef REVEAL
42
#endif
I
.
E
V
S
S
.B
cpp -P answer.txt
235
www.onlineeducation.bharatsevaksamaj.net
www.bssskillmission.in
(Fancy)
236
String Substitution
N
I
.
E
V
S
S
.B
www.onlineeducation.bharatsevaksamaj.net
www.bssskillmission.in
237
N
I
.
E
V
S
S
.B
www.onlineeducation.bharatsevaksamaj.net
www.bssskillmission.in
hello.c
#include <stdio.h>
int main() {
printf("Hello,
World!\n");
N
I
.
return 0;
E
V
S
}
S
B
gcc -E hello.c
238
www.onlineeducation.bharatsevaksamaj.net
hello.c
www.bssskillmission.in
#include <stdio.h>
int main() {
printf("Hello,
World!\n");
N
I
.
return 0;
E
V
S
}
S
B
gcc -E hello.c
239
www.onlineeducation.bharatsevaksamaj.net
hello.c
www.bssskillmission.in
#include <stdio.h>
int main() {
printf("Hello,
World!\n");
N
I
.
return 0;
E
V
S
}
S
B
gcc -E hello.c
240
www.onlineeducation.bharatsevaksamaj.net
www.bssskillmission.in
output:
__attribute__((__format__
(__printf__, 1, 2)));
N
I
.
int main() {
E
V
S
printf("Hello,
World!\n");
S
B
.
}
W
W
W
gcc -E hello.c
241
www.onlineeducation.bharatsevaksamaj.net
www.bssskillmission.in
output:
int main() {
printf("Hello,
World!\n");
N
I
.
}
V
S
S
.B
gcc -E hello.c
242
www.onlineeducation.bharatsevaksamaj.net
www.bssskillmission.in
#include is not
N
I
.
E
V
S
import
pickle
S
.B
W
W
W
import java.io.*;
243
fib.c
www.onlineeducation.bharatsevaksamaj.net
www.bssskillmission.in
#define MAX_FIB 20
int fib[MAX_FIB];
int main() {
fib[0] = 0;
N
I
.
fib[1] = 1;
E
V
S = 2; i < MAX_FIB; i++)
for(int Si
B
.
fib[i]
= fib[i-1] + fib[i-2];
W
W
return
0;
W
}
gcc -E fib.c
244
www.onlineeducation.bharatsevaksamaj.net
output:
www.bssskillmission.in
int fib[20];
int main() {
fib[0] = 0;
fib[1] = 1;
IN
.
for(int iV=E 2; i < 20; i++)
S
S
fib[i]
=
fib[i-1]
+
fib[i-2];
B
.
W
}
gcc -E fib.c
245
www.onlineeducation.bharatsevaksamaj.net
www.bssskillmission.in
debug.c
#include <stdio.h>
int main() {
#ifdef DEBUG
N
I
.
printf("Hello,
World!\n");
E
V
#endif
BSS
.
return
0;
W
W
}
W
246
www.onlineeducation.bharatsevaksamaj.net
www.bssskillmission.in
debug.c
#include <stdio.h>
int main() {
printf("Hello,
World!\n");
N
I
.
return 0;
E
V
S
}
S
B
247
www.onlineeducation.bharatsevaksamaj.net
www.bssskillmission.in
debug.c
#include <stdio.h>
int main() {
return 0;
N
I
.
}
V
S
S
.B
248
www.onlineeducation.bharatsevaksamaj.net
249
www.bssskillmission.in
Pre-Process
N
I
.
E
V
S
S
.B
Compile
Link
www.bsscommunitycollege.in www.bssnewgeneration.in www.bsslifeskillscollege.in
www.onlineeducation.bharatsevaksamaj.net
main.c
int a = 1;
250
www.bssskillmission.in
int a = 1;
main.o
prog
%!(*@
@*)!%
N
Compile
I
.
E
V
S
S
.B
./prog
www.onlineeducation.bharatsevaksamaj.net
www.bssskillmission.in
N
Compile
I
.
E
V
S
S
.B
Type-checking
Linear processing
251
www.onlineeducation.bharatsevaksamaj.net
www.bssskillmission.in
Type-checking
int reptile() {
return "frog";
N
}
I
.
E
V
S
S
.B
252
www.onlineeducation.bharatsevaksamaj.net
www.bssskillmission.in
253
Type-checking
int reptile() {
return "frog";
N
}
I
.
E
V
S
S
reptile.c:
.B In function reptile:
W
reptile.c:2:5:
warning:
return
makes
W
W
integer
from pointer without a cast
www.onlineeducation.bharatsevaksamaj.net
www.bssskillmission.in
Type-checking
def vegetable(day):
if day != "Tuesday":
return.IN"tomato"
E
else:
SV
S
1000
B
.return
254
www.onlineeducation.bharatsevaksamaj.net
www.bssskillmission.in
255
Type-checking
def vegetable(day):
if day != "Tuesday":
return.IN"tomato"
E
else:
SV
S
1000
B
.return
www.onlineeducation.bharatsevaksamaj.net
www.bssskillmission.in
int reptile() {
return "frog";
N
}
I
.
E
V
S
S
.B
256
www.onlineeducation.bharatsevaksamaj.net
www.bssskillmission.in
int () {
return char*;
N
}
I
.
E
V
S
S
.B
257
www.onlineeducation.bharatsevaksamaj.net
www.bssskillmission.in
258
N
return "tomato";
I
.
E
} else {
SV
S
return
.B 1000;
W
}
W
}
W
www.onlineeducation.bharatsevaksamaj.net
www.bssskillmission.in
int (char*) {
if (int){
N
return char*;
I
.
E
} else {
SV
S
return
.B int;
W
}
W
}
W
259
www.onlineeducation.bharatsevaksamaj.net
www.bssskillmission.in
int (char*) {
if (int){
N
return char*;
I
.
E
} else {
SV
S
return
.B int;
W
}
W
}
W
260
www.onlineeducation.bharatsevaksamaj.net
www.bssskillmission.in
int (char*) {
if (int){
N
return char*;
I
.
E
} else { SV
S
return
.B int;
W
} W
} W
261
www.onlineeducation.bharatsevaksamaj.net
www.bssskillmission.in
N
Everything
has
I
.
E
V
S
S
.B
W
a single,
fixed
type
W
W
262
www.onlineeducation.bharatsevaksamaj.net
www.bssskillmission.in
return
a
+
b
IN
.
E
V
S
S
.B
W
foo(2,
3)
W
W
foo("2", "3")
263
www.onlineeducation.bharatsevaksamaj.net
www.bssskillmission.in
Variable Declarations
int foo;
float foo;
double foo; .IN
E
char foo; SV
S
.B
W
int foo[42];
W
int *foo;
struct Bar foo;
www.bsscommunitycollege.in www.bssnewgeneration.in www.bsslifeskillscollege.in
264
www.onlineeducation.bharatsevaksamaj.net
www.bssskillmission.in
Function Declarations
return type.BS
N
I
.
E
V
S argument types
265
www.onlineeducation.bharatsevaksamaj.net
www.bssskillmission.in
Function Declarations
void exit(int);
N
I
.
E
V
returns nothing
S
S
.B
intWrand(void);
takes no arguments
266
www.onlineeducation.bharatsevaksamaj.net
www.bssskillmission.in
267
int foo(int
a,
int
b){
N
I
.
E
V
return
a
+
b;
S
S
.B
}
WW
W
www.onlineeducation.bharatsevaksamaj.net
www.bssskillmission.in
reptile.c: In function
reptile:
N
I
.
E
reptile.c:2:5:
warning:
return
makes
V
S
S
integer from
.B pointer without a cast
268
www.onlineeducation.bharatsevaksamaj.net
www.bssskillmission.in
reptile.c: In function
reptile:
N
I
.
E
reptile.c:2:5:
warning:
return
makes
V
S
S
integer from
.B pointer without a cast
int a = 4;
float b = (float)a;
269
www.onlineeducation.bharatsevaksamaj.net
int
float
double
N
I
.
char
E
V
S
S
int[] W.B
W
int*W
void (*f )(int)
struct X
270
www.bssskillmission.in
int
float
double
char
int[]
int*
void (*f )(int)
struct X
www.onlineeducation.bharatsevaksamaj.net
int
float
double
N
I
.
char
E
V
S
S
int[] W.B
W
int*W
void (*f )(int)
struct X
allowed casts
271
www.bssskillmission.in
int
float
double
char
int[]
int*
void (*f )(int)
struct X
www.onlineeducation.bharatsevaksamaj.net
www.bssskillmission.in
N
I
.
E
V
S
S
.B
272
www.onlineeducation.bharatsevaksamaj.net
int
float
double
N
I
.
char
E
V
S
S
int[] W.B
W
int*W
void (*f )(int)
struct X
allowed casts
273
www.bssskillmission.in
int
float
double
char
int[]
int*
void (*f )(int)
struct X
www.onlineeducation.bharatsevaksamaj.net
int
float
double
N
I
.
char
E
V
S
S
int[] W.B
W
int*W
void (*f )(int)
struct X
allowed casts
274
www.bssskillmission.in
int
float
double
char
int[]
int*
void (*f )(int)
struct X
www.onlineeducation.bharatsevaksamaj.net
int
float
double
N
I
.
char
E
V
S
S
int[] W.B
W
int*W
void (*f )(int)
struct X
implicit casts
275
www.bssskillmission.in
int
float
double
char
int[]
int*
void (*f )(int)
struct X
www.onlineeducation.bharatsevaksamaj.net
int
float
double
N
I
.
char
E
V
S
S
int[] W.B
W
int*W
void (*f )(int)
struct X
implicit casts
276
www.bssskillmission.in
int
float
double
char
int[]
int*
void (*f )(int)
struct X
www.onlineeducation.bharatsevaksamaj.net
int
float
double
N
I
.
char
E
V
S
S
int[] W.B
W
int*W
void (*f )(int)
struct X
implicit casts
277
www.bssskillmission.in
int
float
double
char
int[]
int*
void (*f )(int)
struct X
www.onlineeducation.bharatsevaksamaj.net
int
float
double
N
I
.
char
E
V
S
S
int[] W.B
W
int*W
void (*f )(int)
struct X
implicit casts
278
www.bssskillmission.in
int
float
double
char
int[]
int*
void (*f )(int)
struct X
www.onlineeducation.bharatsevaksamaj.net
www.bssskillmission.in
N
Compile
I
.
E
V
S
S
.B
Type-checking
Linear processing
279
www.onlineeducation.bharatsevaksamaj.net
www.bssskillmission.in
N
I
.
E
V
S
S
.B
Linear processing
280
www.onlineeducation.bharatsevaksamaj.net
www.bssskillmission.in
V
S
S
.B
281
www.onlineeducation.bharatsevaksamaj.net
www.bssskillmission.in
int main() {
printf("%d\n", answer());
return 0;
N
I
.
}
V
S
S
.B
int answer()
{
W
W
return
1337;
W
}
282
www.onlineeducation.bharatsevaksamaj.net
www.bssskillmission.in
int main() {
printf("%d\n", answer());
return 0;
N
I
.
}
E
V
S
S
.B
int answer()
{
W
W
return
1337;
W
}
283
www.onlineeducation.bharatsevaksamaj.net
www.bssskillmission.in
int answer() {
return 1337;
N
I
.
E
V
int main()SS{
B
.
printf("%d\n",
answer());
W
W
return
0;
W
}
284
www.onlineeducation.bharatsevaksamaj.net
285
www.bssskillmission.in
int answer();
declaration
int main() {
N
I
.
printf("%d\n",
answer());
E
V
returnSS0;
B
.
}
int answer() {
return 1337;
definition
HMM
www.onlineeducation.bharatsevaksamaj.net
www.bssskillmission.in
N
I
.
E
V
S
S
.B
286
www.onlineeducation.bharatsevaksamaj.net
287
www.bssskillmission.in
int answer();
declaration
int main() {
N
I
.
printf("%d\n",
answer());
E
V
returnSS0;
B
.
}
int answer() {
return 1337;
definition
www.onlineeducation.bharatsevaksamaj.net
288
www.bssskillmission.in
int answer();
declaration
int main() {
N
I
.
printf("%d\n",
answer());
E
V
returnSS0;
B
.
}
W
int answer() {
return 1337;
}
definition
www.onlineeducation.bharatsevaksamaj.net
289
www.bssskillmission.in
int answer();
declaration
#include "answer.h"
int main() {
N
I
.
printf("%d\n",
answer());
E
V
returnSS0;
B
.
}
W
int answer() {
return 1337;
}
definition
www.onlineeducation.bharatsevaksamaj.net
290
www.bssskillmission.in
Pre-Process
N
I
.
E
V
S
S
.B
Compile
Link
www.bsscommunitycollege.in www.bssnewgeneration.in www.bsslifeskillscollege.in
www.onlineeducation.bharatsevaksamaj.net
291
www.bssskillmission.in
main.o
N
I
int main() VE.
S
S
.B
W
intWanswer()
W
www.onlineeducation.bharatsevaksamaj.net
www.bssskillmission.in
main.o
N
I
int main() VE.
S
S
.B
W
W
W
292
www.onlineeducation.bharatsevaksamaj.net
www.bssskillmission.in
293
function answer
N
I
. architecture x86_64:
Undefined symbols E
for
V
"_answer", referenced
from:
S
S
_main in
.B ccuzmRrm.o
ld: symbol(s)
W
collect2:
W ld returned 1 exit status
www.onlineeducation.bharatsevaksamaj.net
www.bssskillmission.in
294
function answer
N
I
. architecture x86_64:
Undefined symbols E
for
V
"_answer", referenced
from:
S
S
_main in
.B ccuzmRrm.o
ld: symbol(s)
W
collect2:
W ld returned 1 exit status
www.onlineeducation.bharatsevaksamaj.net
www.bssskillmission.in
295
function answer
N
I
. architecture x86_64:
Undefined symbols E
for
V
"_answer", referenced
from:
S
S
_main in
.B ccuzmRrm.o
ld: symbol(s)
W
collect2:
W ld returned 1 exit status
www.onlineeducation.bharatsevaksamaj.net
www.bssskillmission.in
296
function answer
N
I
. architecture x86_64:
Undefined symbols E
for
V
"_answer", referenced
from:
S
S
_main in
.B ccuzmRrm.o
ld: symbol(s)
W
collect2:
W ld returned 1 exit status
www.onlineeducation.bharatsevaksamaj.net
www.bssskillmission.in
297
function answer
N
I
. architecture x86_64:
Undefined symbols E
for
V
"_answer", referenced
from:
S
S
_main in
.B ccuzmRrm.o
ld: symbol(s)
W
collect2:
W ld returned 1 exit status
www.onlineeducation.bharatsevaksamaj.net
www.bssskillmission.in
main.o
N
I
int main() VE.
S
S
.B
W
W
W
298
www.onlineeducation.bharatsevaksamaj.net
299
www.bssskillmission.in
main.o
N
I
int main() VE.
S
S
.B
W
W
W
answer.o
int answer()
www.onlineeducation.bharatsevaksamaj.net
300
www.bssskillmission.in
main.o
N
I
int main() VE.
S
S
.B
W
W
W
int main() {
printf("%d\n", answer());
return 0;
}
answer.o
int answer()
int answer() {
return 1337;
}
www.onlineeducation.bharatsevaksamaj.net
301
www.bssskillmission.in
main.o
N
I
int main() VE.
S
S
.B
W
W
W
answer.o
int answer()
www.onlineeducation.bharatsevaksamaj.net
302
www.bssskillmission.in
prog
N
I
.
int
E main()
V
S
S
.B
int answer()
www.onlineeducation.bharatsevaksamaj.net
www.bssskillmission.in
answer.c: In function
main:
N
I
.
E
answer.c:4: warning:
implicit declaration of
V
S
function answer
.B
303
www.onlineeducation.bharatsevaksamaj.net
www.bssskillmission.in
answer.c: In function
main:
N
I
.
E
answer.c:4: warning:
implicit declaration of
V
S
function answer
.B
304
www.onlineeducation.bharatsevaksamaj.net
www.bssskillmission.in
answer.h
int answer();
main.c
N
#include "answer.h"
I
.
E
V
S
S
.B {
int main()
W
printf("%d\n",
answer());
W
Wreturn 0;
305
www.onlineeducation.bharatsevaksamaj.net
www.bssskillmission.in
answer.h
int answer();
answer.c
N
#include "answer.h"
I
.
E
V
S
S
.B
int answer()
{
W
return
1337;
W
W
}
306
www.onlineeducation.bharatsevaksamaj.net
www.bssskillmission.in
307
Summary
N
I
.
E
V
S
S
.B
www.onlineeducation.bharatsevaksamaj.net
www.bssskillmission.in
answer.h
int answer();
main.c
N
#include "answer.h"
I
.
E
V
S
S
.B {
int main()
W
printf("%d\n",
answer());
W
Wreturn 0;
308
www.onlineeducation.bharatsevaksamaj.net
Preprocess:
www.bssskillmission.in
gcc -E main.c
int answer();
N
I
int main() {
E.
V
S
printf("%d\n",
answer());
S
B
.
return
W 0;
}
WW
309
www.onlineeducation.bharatsevaksamaj.net
Compile:
www.bssskillmission.in
main.o
%!(*@
N
I
.
E
answer.o
V
S
S
.B
%!(*@
W
310
www.onlineeducation.bharatsevaksamaj.net
Link:
www.bssskillmission.in
311
prog
%!(*@
N
I
.
E
V
S
S
.B
www.onlineeducation.bharatsevaksamaj.net
312
www.bssskillmission.in
Pre-Process
N
I
.
E
V
S
S
.B
Compile
Link
www.onlineeducation.bharatsevaksamaj.net
www.bssskillmission.in
MIT OpenCourseWare
http://ocw.mit.edu
For information about citing these materials or our Terms of Use, visit: http://ocw.mit.edu/terms.
N
I
.
E
V
S
S
.B
313
www.onlineeducation.bharatsevaksamaj.net
www.bssskillmission.in
The assignment was split into 2 problems, but below we've included only the final
versions of all the files.
The header files remained unchanged.
N
I
.
E
FIBONACCI.C
#include <stdio.h>
#include "fibonacci.h"
void print_fib(int n) {
printf("%d\n", fib(n));
}
int fib(int n) {
if (n <= 0) {
return
} else if(n ==
return
} else {
return
}
}
V
S
S
.B
0;
1) {
1;
fib(n-1) + fib(n-2);
REVERSE.C
#include <stdio.h>
void reverse(char *str, int len) {
char reversed[len+1];
int pos = 0;
int caret = len;
reversed[len] = '\0';
for (int i = len - 1; i >= -1; --i){
www.bsscommunitycollege.in www.bssnewgeneration.in www.bsslifeskillscollege.in
314
www.onlineeducation.bharatsevaksamaj.net
www.bssskillmission.in
if (i == -1 || str[i] == ' '){
for (int j = i + 1; j < caret; ++j){
reversed[pos++] = str[j];
}
if (i != -1) {
reversed[pos++] = ' ';
}
caret = i;
}
printf("%s\n", reversed);
FIBEVERSE.C
#include
#include
#include
#include
<stdlib.h>
<string.h>
"fibonacci.h"
"reverse.h"
N
I
.
E
V
S
#ifdef FIBONACCI
if (i < argc) {
print_fib(atoi(argv[i]));
i++;
}
#endif
S
.B
#ifdef REVERSE
if (i < argc) {
reverse(argv[i], strlen(argv[i]));
i++;
}
#endif
return 0;
}
315
www.onlineeducation.bharatsevaksamaj.net
www.bssskillmission.in
MIT OpenCourseWare
http://ocw.mit.edu
For information about citing these materials or our Terms of Use, visit: http://ocw.mit.edu/terms.
N
I
.
E
V
S
S
.B
316