Professional Documents
Culture Documents
C++ (& C) Grab Bag
C++ (& C) Grab Bag
Parent destructors
struct Buffer {
Buffer(int s) { buf = new char[s]; }
~Buffer() { delete [] buf; }
char *buf;
};
struct FBuffer : public Buffer {
FBuffer(int s) : Buffer(s) {
f = fopen("file", "w");
}
~FBuffer() { fclose(f); }
void write() { fwrite(buf, 1, 40, f); }
FILE *f;
};
4
struct FBuffer
: public Buffer {
FBuffer(int s);
~FBuffer();
void write();
FILE *f;
};
struct Buffer {
Buffer(int s);
~Buffer();
char *buf;
};
delete buf;
//
struct FBuffer
: public Buffer {
FBuffer(int s);
~FBuffer();
void write();
FILE *f;
};
struct Buffer {
Buffer(int s);
~Buffer();
char *buf;
};
delete fbuf;
//
Construction
Buer
(buf)
Buer
(buf)
Uninitialized
FBuer
(f)
Uninitialized
Destruction
Buer
(buf)
Buer
(buf)
Uninitialized
FBuer
(f)
Uninitialized
struct FBuffer
: public Buffer {
FBuffer(int s);
~FBuffer();
void write();
FILE *f;
};
struct Buffer {
Buffer(int s);
~Buffer();
char *buf;
};
delete fbuf;
struct FBuffer
struct Buffer {
: public Buffer {
Buffer();
FBuffer();
virtual ~Buffer(); virtual ~FBuffer();
char *buf;
void write();
};
FILE *f;
};
delete fbuf;
//
10
C++ Casts
11
// C cast
// C-style cast
float b = 98.6;
int a = int(b);
12
class Cat { };
Cat
Tiger
Persian
13
// valid up-cast
14
// compile error
15
// valid down-cast
16
// invalid down-cast
Cat *c = new Persian;
// t3 is NULL
17
References
18
19
20
Hello, World!
21
#include <iostream>
int main() {
std::cout << "Hello, World!"
<< std::endl;
return 0;
}
22
#include <iostream>
int main() {
std::cout << "Hello, World!"
<< std::endl;
return 0;
}
23
Namespaces
24
25
26
namespace sf {
SNDFILE *open(const char *);
count_t seek(SNDFILE *, count_t);
int error(SNDFILE *);
}
27
#include <iostream>
int main() {
std::cout << "Hello, World!"
<< std::endl;
return 0;
}
28
29
g++ -E hello.cpp
iostream
namespace std {
extern istream cin;
extern ostream cout;
extern ostream cerr;
}
30
namespace std {
extern istream cin;
extern ostream cout;
extern ostream cerr;
class ActionLawsuit {
};
31
class ActionLawsuit {
};
32
namespace super {
namespace std {
extern istream cin;
extern ostream cout;
extern ostream cerr;
class ActionLawsuit {
};
super::std::ActionLawsuit;
33
extern
34
iostream
namespace std {
extern istream cin;
extern ostream cout;
extern ostream cerr;
}
35
iostream
ostream cout;
main.c
foo.c
#include <iostream>
#include <iostream>
int main() {
cout << "i";
foo();
}
int foo() {
cout << "Phone";
}
36
ostream cout;
ostream cout;
int main() {
cout << "i";
foo();
}
int foo() {
cout << "Phone";
}
main.o
foo.o
cout
cout
main
foo
37
int main() {
cout << "i";
foo();
}
int foo() {
cout << "Phone";
}
main.o
foo.o
main
foo
<standard library>
cout
38
#include <iostream>
int main() {
std::cout << "Hello, World!"
<< std::endl;
return 0;
}
39
#include <iostream>
int main() {
std::cout << "Hello, World!"
<< std::endl;
int a = 2 << 1;
return 0;
}
40
Operator Overloading
41
struct vec2 {
vec2(float x, float y)
: x(x), y(y) { }
float x, y;
};
int main() {
vec2 a(1, 0);
vec2 b(1, 3);
vec2 c = a + b; // compile error
}
vec.cpp: In function int main():
42
43
44
45
a
a
a
a
a
a
a
a
a
a
+ b
- b
* b
/ b
% b
< b
<= b
== b
>= b
> b
a != b
a && b
a || b
a & b
a | b
a ^ b
a << b
a >> b
a, b
a[b]
46
+a
-a
++a
a++
--a
a-!a
~a
*a
&a
vec2 operator+();
47
a
a
a
a
a
a
= b
+= b
-= b
*= b
/= b
%= b
a
a
a
a
a
a
&= b
|= b
^= b
<<= b
>>= b
= (b += c)
Streams
49
struct Foo {
char *str() const {
return "Foo!";
}
};
ostream &
operator<<(ostream &os, const Foo &f) {
return os << f.str();
}
int main() {
Foo f;
std::cout << f << std::endl;
}
50
MIT OpenCourseWare
http://ocw.mit.edu
For information about citing these materials or our Terms of Use, visit: http://ocw.mit.edu/terms.