Professional Documents
Culture Documents
[]
[
1.0
2001 7 24
C++/C v 1.0
/
V 0.9
V 1.0
2001
2001-7-1
2001-7-18
2001-7-18
V 0.9
2001-7-24
Page 2 of 2
C++/C v 1.0
.................................................................................................................................... 6
1 ............................................................................................................... 11
1.1 ................................................................................................... 11
1.2 .......................................................................................................... 12
1.3 ....................................................................................................... 13
1.4 .......................................................................................................... 13
1.5 .................................................................................................................. 14
2 ........................................................................................................... 15
2.1 .......................................................................................................................... 15
2.2 ...................................................................................................................... 16
2.3 ....................................................................................................... 17
2.4 .......................................................................................................................... 18
2.5 .................................................................................................................. 19
2.6 .......................................................................................................... 19
2.7 .......................................................................................................................... 20
2.8 .................................................................................................................. 21
3 ............................................................................................................... 22
3.1 .................................................................................................................. 22
3.2 W INDOWS ...................................................................... 23
3.3 UNIX .............................................................................. 25
4 ................................................................................................ 26
4.1 ....................................................................................................... 26
4.2 .............................................................................................................. 27
4.3 IF ...................................................................................................................... 27
4.4 ....................................................................................................... 29
4.5 FOR ........................................................................................ 30
4.6 SWITCH .............................................................................................................. 30
4.7 GOTO ................................................................................................................. 31
5 ....................................................................................................................... 33
5.1 ....................................................................................................... 33
5.2 CONST # DEFINE ........................................................................................ 33
5.3 .......................................................................................................... 33
5.4 .............................................................................................................. 34
6 ............................................................................................................... 36
2001
Page 3 of 3
C++/C v 1.0
6.1 .............................................................................................................. 36
6.2 .......................................................................................................... 37
6.3 ............................................................................................... 39
6.4 .................................................................................................................. 40
6.5 .................................................................................................................. 41
6.6 ................................................................................................... 42
7 ............................................................................................................... 44
7.1 ........................................................................................................... 44
7.2 ........................................................................................ 44
7.3 .................................................................................................... 45
7.4 ................................................................................. 47
7.5 FREE DELETE .............................................................................. 50
7.6 .................................................................................... 50
7.7 ....................................................................................................... 51
7.8 MALLOC/ FREE NEW/ DELETE ..................................................... 52
7.9 ................................................................................................... 53
7.10 MALLOC / FREE ...................................................................................... 54
7.11 NEW/ DELETE ........................................................................................ 55
7.12 ......................................................................................................... 56
8 C++ ............................................................................................ 57
8.1 ....................................................................................................... 57
8.2 ................................................................................ 60
8.3 .......................................................................................................... 63
8.4 .............................................................................................................. 64
8.5 .................................................................................................................. 65
8.6 .......................................................................................................... 68
9 ................................................................. 69
9.1 .................................................................................... 69
9.2 ............................................................................................... 70
9.3 ................................................................................................... 72
9.4 STRING ............................................................... 72
9.5 ........................................................................ 73
9.6 STRING ....................................................... 74
9.7 ............................................................. 75
9.8 ........................................................................ 76
9.9 ........................................................................................................... 77
10 .................................................................................................. 78
2001
Page 4 of 4
C++/C v 1.0
10.1 ........................................................................................................................ 78
10.2 ........................................................................................................................ 80
11 ...................................................................................................... 82
11.1 CONST .............................................................................. 82
11.2 ..................................................................................................... 84
11.3 ..................................................................................................... 85
............................................................................................................................ 87
A C++/C ............................................................................................ 88
B C++/C ....................................................................................................... 93
C C++/C ......................................................................... 97
2001
Page 5 of 5
C++/C v 1.0
C++/C
N-1
Internet
(1)
(2)
(3)
(4)
(5)
(6)
(7)
(8)
(9)
30
(10) 9:00 5:00 9:00
C++/C
CAD 3D
2001
Page 6 of 6
C++/C v 1.0
1995 2000
10 C++ 3D
3D
strcpy
1
2
3
IT
IT
2001
Page 7 of 7
C++/C v 1.0
10 if
14
C++/C
IT
1
2
1
2
3
2001
Page 8 of 8
C++/C v 1.0
B C++/C
3 85 C++/C
C++/C
Bug
CMMI
CMMI
2001
Page 9 of 9
C++/C v 1.0
C++/C
1
2
3
2002 7 CMMI 3
1000
2001 7
2001
Page 10 of 10
C++/C v 1.0
1
C++/C declaration
implementationdefinition
1.1
1-1
1
2
3/
4
/*
* Copyright (c) 2001,
* All rights reserved.
*
* filename.h
*
*
*
* 1.1
*
* 2001 7 20
*
* 1.0
*
* 2001 5 10
*/
1-1
2001
Page 11 of 11
C++/C v 1.0
1.2
1 1-1
2
3
graphics.h 1-2
1-2-1 ifndef/define/endif
1-2-1
C++
// 1-1
#ifndef
GRAPHICS_H
#define
GRAPHICS_H
#include <math.h>
// graphics.h
//
#include myheader.h
//
void Function1(); //
class Box
//
};
#endif
1-2 C++/C
2001
Page 12 of 12
C++/C v 1.0
1.3
1 1-1
2
3
graphics.cpp 1-3
// 1-1
#include graphics.h
//
//
void Function1()
{
}
//
void Box::Draw()
{
}
1-3 C++/C
1.4
BasicFortran C++/C
2001
Page 13 of 13
C++/C v 1.0
1.5
include source
2001
Page 14 of 14
C++/C v 1.0
2.1
2-1-1
2-1a
2-1-2
2-1b
//
//
void Function1()
while (condition)
statement1;
//
//
if (condition)
void Function2()
statement2;
else
//
void Function3()
statement3;
}
//
statement4;
}
2-1(a)
2001
2-1(b)
Page 15 of 15
C++/C v 1.0
2.2
2-2-1
2-2-2ifforwhiledo
{}
2-2a 2-2b
int width; //
int height; //
int depth; //
X a + b;
x = a + b;
y = c + d;
z = e + f;
y = c + d;
z = e + f;
if (width < height)
{
dosomething();
}
for (initialization; condition; update)
{
dosomething();
other();
}
//
other();
2-2(a)
2-2(b)
2-2-1
2001
// width
// height
// depth
Page 16 of 16
C++/C v 1.0
2.3
2-3-1 constvirtualinlinecase
ifforwhile
2-3-2
2-3-3;
2-3-4 Function(x, y, z);
for (initialization; condition; update)
2-3-5
=+= >=<=+*%&&||<<,^
2-3-6!
~
++
--
&
2-3-7.->
2-3-1 for if
for (i=0; i<10; i++) if ((a<=b) && (c<=d))
void Func1(int x, int y, int z);
//
//
//
//
//
//
//
//
//
//
//
//
int * x = & y;
//
array[5] = 0;
// array [ 5 ] = 0;
a.Function();
// a . Function();
b->Function();
// b -> Function();
2-3
2001
Page 17 of 17
C++/C v 1.0
2.4
2-4-1{}
2-4-2{ }{
2-4a 2-4b
void Function(int x)
// program code
// program code
}
if (condition)
if (condition){
// program code
// program code
}
else {
else
// program code
}
// program code
}
for (initialization; condition; update)
// program code
// program code
}
While (condition)
while (condition){
// program code
// program code
}
2-4(a)
2001
2-4(b)
Page 18 of 18
C++/C v 1.0
2.5
2-5-1 70 80
2-5-2
2.6
*
* int*
x; x
int
int*
x, y; y
x y
2-6-1 *
2001
char
*name;
int
*x, y; // y
Page 19 of 19
C++/C v 1.0
2.7
C /**/C++/**/
//
1
2
3
2-6
2-7-1
2-7-2
// i 1
i++;
2-7-3
2-7-4
2-7-5
2-7-6
2-7-8
/*
if ()
while ()
*/
} // end of while
} // end of if
}
2-6
2001
Page 20 of 20
C++/C v 1.0
2.8
publicprotected private
class A
class A
{
private:
public:
int
i, j;
void Func1(void);
float
x, y;
void Func2(void);
public:
private:
void Func1(void);
int
i, j;
void Func2(void);
float
x, y;
}
8.3(a)
2001
8.3(b)
Page 21 of 21
C++/C v 1.0
3
Microsoft
ch
p ppch
int
i,
j,
k;
float
x,
y,
z;
int
iI,
iJ,
float
fX,
fY,
ik;
fZ;
// i int
// f float
3.1
3.2
3-1-1
CurrentValue
NowValue
3-1-2min-length && max-information
ANSI C 6 C++/C
! maxval maxValueUntilOverflow
i,j,k,m,n,x,y,z
3-1-3
Windows AddChild
Unix add_child
2001
Page 22 of 22
C++/C v 1.0
3-1-4
int
x,
X;
// x X
// foo FOO
3-1-6
float
value;
float
oldValue;
float
newValue;
3-1-7
DrawBox();
//
box->Draw();
//
3-1-8
int minValue;
int maxValue;
int SetValue();
int GetValue();
3-1-1 Value1,Value2
3.2 Windows
Windows
2001
Page 23 of 23
C++/C v 1.0
3-2-1
class Node;
//
class LeafNode;
//
void
Draw(void);
//
void
SetValue(int value); //
3-2-2
BOOL flag;
int
drawMode;
3-2-3
void Init()
{
static int s_initValue; //
}
3-2-5 g_ global
int g_howManyPeople;
//
int g_howMuchMoney;
//
3-2-6 m_ member
2001
Page 24 of 24
C++/C v 1.0
3-2-7
OpenGL
gl GL
3.3 Unix
2001
Page 25 of 25
C++/C v 1.0
4
ifforwhilegotoswitch
C++/C
4.1
C++/C 4-1
+
()
[]
->
++
.
sizeof
--
&
<<
>>
<
<=
==
!=
>
>=
&
&&
||
?:
+=
|=
<<=
-=
*=
/=
%=
&=
^=
>>=
4-1
4-1-1
4-1
Page 26 of 26
C++/C v 1.0
4.2
a = b = c = 0
1
2
4-2-1
d = (a = b + c) + r ;
a d
a = b + c;
d = a + r;
4-2-3
if (a < b < c)
// a < b < c
if ( (a<b)<c )
4.3 if
if C++/C
if
4.3.1
4-3-1 TRUEFALSE 10
FALSE
TRUETRUE Visual C++ TRUE 1
Visual Basic TRUE -1
flag if
if (flag) // flag
2001
Page 27 of 27
C++/C v 1.0
if (!flag) // flag
if (flag == TRUE)
if (flag == 1 )
if (flag == FALSE)
if (flag == 0)
4.3.2
4-3-2=== 0
value if
if (value == 0)
if (value != 0)
// value
if (value)
if (!value)
4.3.3
4-3-3===
float double
===>=<=
x
if (x == 0.0) //
// p NULL p
if (p != NULL)
if (p == 0)
// p
if (p != 0)
if (p)
// p
if (!p)
4.3.5 if
2001
Page 28 of 28
C++/C v 1.0
if (NULL == p)
if (p == NULL) if (p = NULL) p NULL
if (p = NULL) if (NULL = p) NULL
if/else/return
if (condition)
return x;
return y;
if (condition)
{
return x;
}
else
{
return y;
}
4.4
C++/C for while do
4-4-1
CPU 4-4(b) 4-4(a)
{
for ( col=0; col<5; col++ )
{
sum = sum + a[row][col];
}
}
}
}
4-4(a)
4-4(b)
4-4-2
2001
Page 29 of 29
C++/C v 1.0
N 4-4(d)
N 4-4(c)
if (condition)
{
if (condition)
DoSomething();
else
DoSomething();
}
DoOtherthing();
}
else
{
for (i=0; i<N; i++)
DoOtherthing();
}
4-4(c)
4-4(d)
4.5 for
4-5-1 for for
4-5-1 for
4-5(a) x 0 =< x < N N
N
4-5(b) x 0 =< x <= N-1 N-1
N
4-5(a)
for (int x=0; x<N; x++)
4-5(a)
4-5(b)
4.6 switch
if switch
2001
Page 30 of 30
C++/C v 1.0
switch if if
switch
switch
switch (variable)
{
case value1 :
break;
case value2 :
break;
default :
break;
}
4-6-1 case break
4.7 goto
goto goto
goto
goto state;
String s1, s2; // goto
int sum = 0; // goto
state:
goto
C++/C goto
goto goto
break ;
{
{
{
goto error;
2001
Page 31 of 31
C++/C v 1.0
}
}
}
error:
goto
2001
Page 32 of 32
C++/C v 1.0
5
C #define
C++ #define const const
5.1
2
3
5-1-1
#define
MAX
100
/*
const int
MAX = 100;
//
C++ const
const float
PI = 3.14159; //
*/
C++ const
1 const
2 const
5-2-1 C++ const const
5.3
5-3-1
5-3-2
2001
Page 33 of 33
C++/C v 1.0
const
float
RADIUS = 100;
const
float
DIAMETER = RADIUS * 2;
5.4
#define
const const
const
const
const
SIZE
class A
{
const int SIZE = 100; // const
int array[SIZE];
// SIZE
};
const
class A
{
A(int size);
//
}
A
a(100);
// a SIZE 100
b(200);
// b SIZE 200
const
class A
{
enum { SIZE1 = 100, SIZE2 = 200}; //
int array1[SIZE1];
2001
Page 34 of 34
C++/C v 1.0
int array2[SIZE2];
};
PI=3.14159
2001
Page 35 of 35
C++/C v 1.0
6
C++/C
C
pass by valuepass by pointerC++
pass by reference
6.6
6.1
6-1-1
void
//
float GetValue();
//
6-1-2
StringCopy str1
str2
void StringCopy(char *str1, char *str2);
str1 str2
strSource strDestination
strSource strDestination
char str[20];
StringCopy(str, Hello World);
//
6-1-3 const
2001
Page 36 of 36
C++/C v 1.0
6-1-1 5
6-1-2
C printf
int printf(const chat *format[, argument]);
6.2
6-2-1
C
void
C++ C++ C
C++/ C
void
6-2-2
C getchar
char c;
c = getchar();
if (c == EOF)
getchar c char
getchar char int
int getchar(void);
c char [-128127] EOF char
if
getchar
6-2-3
return
C getchar int
2001
Page 37 of 37
C++/C v 1.0
getchar getchar
EOF EOF
1 getchar int
return
6-2-1
strcpy
char *strcpy(char *strDestconst char *strSrc);
strcpy strSrc strDest strDest
char str[20];
int
6-2-2
class String
{
//
String & operate=(const String &other);
// friend
friend
String
private:
char *m_data;
}
String operate =
String & String::operate=(const String &other)
{
if (this == &other)
return *this;
delete m_data;
2001
Page 38 of 38
C++/C v 1.0
String a,b,c;
a = b;
// *this
a = b = c;
// *this
String operate +
String
{
String temp;
delete temp.data; // temp.data \0
temp.data = new char[strlen(s1.data) + strlen(s2.data) +1];
strcpy(temp.data, s1.data);
strcat(temp.data, s2.data);
return temp;
}
String
temp temp
c = a + b;
a + b c
6.3
6-3-1
assert
6.5
2001
Page 39 of 39
C++/C v 1.0
6-3-2 return
return return
return
1return
char * Func(void)
{
char str[] = hello world; // str
return str;
//
}
2
3 return
return String(s1 + s2);
temp
String temp(s1 + s2);
return temp;
temp
temp temp
int temp = x + y;
return temp;
int,float,double
6.4
6-4-1
6-4-2 50
6-4-3
2001
Page 40 of 40
C++/C v 1.0
C/C++
static static
6-4-4
6-4-5
6.5
Debug Release Debug Release
assert Debug
6-5 assert
assert
void
{
assert((pvTo != NULL) && (pvFrom != NULL)); //
byte *pbTo = (byte *) pvTo;
// pvTo
// pvFrom
while(size -- > 0 )
*pbTo ++ = *pbFrom ++ ;
return pvTo;
}
6-5
[Maguire, p8-p30]
2001
Page 41 of 41
C++/C v 1.0
6-5-1
6-5-2
6-5-1
6-5-2
6.6
C++n m
referencem referent
int m;
int &n = m;
n m n m
n
m m n m
1
2 NULL NULL
3
k i k = j k j
k 6 k i i 6
int i = 5;
int j = 6;
int &k = i;
k = j;
// k i 6;
C++
Func1 x n
x n, n 0
void Func1(int x)
{
x = x + 10;
}
2001
Page 42 of 42
C++/C v 1.0
int n = 0;
Func1(n);
cout << n = << n << endl;
// n = 0
Func2 x n
n n 10
void Func2(int *x)
{
(* x) = (* x) + 10;
}
int n = 0;
Func2(&n);
cout << n = << n << endl;
// n = 10
Func3 x n x
n x n n 10
void Func3(int &x)
{
x = x + 10;
}
int n = 0;
Func3(n);
cout << n = << n << endl;
// n = 10
2001
Page 43 of 43
C++/C v 1.0
7
Bill Gates
640K ought to be enough for everybody
Bill Gates 1981
7.1
1
static
2
3 malloc new
free delete
7.2
NULL p
assert(p!=NULL) malloc new if(p==NULL)
if(p!=NULL)
2001
Page 44 of 44
C++/C v 1.0
1 1 for
malloc free
new/delete
2 return
7-2-3 1 1
7-2-4
7-2-5 free delete NULL
7.3
C++/C
2001
Page 45 of 45
C++/C v 1.0
7.3.1
7-3-1 a 6 hello\0a
a[0]= X p world world\0
p[0]= X
// p
//
7.3.2
7-3-2 a
b b = a strcpy
b a if(b==a) strcmp
p = a a p a p a
malloc p strlen(a)+1 strcpy
if(p==a) strcmp
//
char a[] = "hello";
char b[10];
strcpy(b, a);
//
if(strcmp(b, a) == 0)
//
b = a;
if (b == a)
//
int len = strlen(a);
char *p = (char *)malloc(sizeof(char)*(len+1));
strcpy(p,a);
// p = a;
if(strcmp(p, a) == 0)
// if (p == a)
7-3-2
2001
Page 46 of 46
C++/C v 1.0
7.3.3
sizeof 7-3-3asizeof(a)
12\0 p a sizeof(p) 4 sizeof(p)
sizeof(char*) p C++/C
7-3-3b a sizeof(a) sizeof(char *)
char a[] = "hello world";
char *p
= a;
// 12
// 4 100
}
7-3-3b
7.4
7-4-1
Test GetMemory(str, 200) str str NULL
//
}
7-4-1
2001
Page 47 of 47
C++/C v 1.0
GetMemory
p _p _p = p_p
p _p
_p p GetMemory
GetMemory
free
7-4-2
void GetMemory2(char **p, int num)
{
*p = (char *)malloc(sizeof(char) * num);
}
void Test2(void)
{
char *str = NULL;
GetMemory2(&str, 100);
// &str str
strcpy(str, "hello");
cout<< str << endl;
free(str);
}
7-4-2
7-4-3
char *GetMemory3(int num)
{
char *p = (char *)malloc(sizeof(char) * num);
return p;
}
void Test3(void)
{
char *str = NULL;
str = GetMemory3(100);
strcpy(str, "hello");
cout<< str << endl;
free(str);
}
7-4-3
2001
Page 48 of 48
C++/C v 1.0
return
return
7-4-4
char *GetString(void)
{
char p[] = "hello world";
return p; //
}
void Test4(void)
{
char *str = NULL;
str = GetString(); // str
cout<< str << endl;
}
7-4-4 return
Test5 GetString2
GetString2 hello world
GetString2
2001
Page 49 of 49
C++/C v 1.0
// p p
if(p != NULL)
//
{
strcpy(p, world); //
}
7-5
7.6
7-6
p
void Func(void)
{
char *p = (char *) malloc(100); //
}
7-6
1
2 NULL
2001
Page 50 of 50
C++/C v 1.0
NULL
7.7
NULL NULL
if if
1 NULL
NULL
char *p = NULL;
char *str = (char *) malloc(100);
2 p free delete NULL p
7.5
3
class A
{
public:
void Func(void){ cout << Func of class A << endl; }
};
void Test(void)
{
A
*p;
{
A
a;
p = &a; // a
}
p->Func();
// p
}
Test p->Func() a p a p
2001
Page 51 of 51
C++/C v 1.0
maloc/free
malloc/free
malloc/free
C++ new
delete new/delete
malloc/free new/delete 7-8
class Obj
{
public :
Obj(void){ cout << Initialization << endl; }
~Obj(void){ cout << Destroy << endl; }
void Initialize(void){ cout << Initialization << endl; }
void
};
void UseMallocFree(void)
{
Obj
*a = (obj *)malloc(sizeof(obj));
//
//
a->Initialize();
//
a->Destroy(); //
//
free(a);
}
void UseNewDelete(void)
{
Obj
*a = new Obj;
//
//
delete a;
//
}
7-8 malloc/free new/delete
2001
Page 52 of 52
C++/C v 1.0
7.9
malloc new NULL
1 NULL return
void Func(void)
{
A
*a = new A;
if(a == NULL)
{
return;
}
}
2 NULL exit(1)
void Func(void)
{
A
*a = new A;
if(a == NULL)
{
cout << Memory Exhausted << endl;
exit(1);
}
2001
Page 53 of 53
C++/C v 1.0
exit(1)
32
malloc new Windows 98 Visual C++
7-9 32
Window 98
32
Unix Windows
void main(void)
{
float *p = NULL;
while(TRUE)
{
p = new float[1000000];
cout << eat memory << endl;
if(p==NULL)
exit(1);
}
}
7-9
7.10 malloc/free
malloc
void * malloc(size_t size);
2001
Page 54 of 54
C++/C v 1.0
malloc length
int
sizeof
malloc void * malloc void
*
malloc
int, float int 16
2 32 4 float 16 4
32 4
cout << sizeof(char) << endl;
cout << sizeof(int) << endl;
cout << sizeof(unsigned int) << endl;
cout << sizeof(long) << endl;
cout << sizeof(unsigned long) << endl;
cout << sizeof(float) << endl;
cout << sizeof(double) << endl;
cout << sizeof(void *) << endl;
malloc () sizeof
p = malloc(sizeof(p))
free
void free( void * memblock );
free malloc p
free(p) p NULL
free p p NULL free p
7.11 new/delete
new malloc
int
int
new sizeof
new
new
class Obj
{
public :
2001
Page 55 of 55
C++/C v 1.0
Obj(void);
//
Obj(int x);
//
}
void Test(void)
{
Obj
*a = new Obj;
Obj
*b = new Obj(1);
// 1
delete a;
delete b;
}
new
Obj
Obj
delete []
delete []objects;
//
delete objects;
//
delete objects[0] 99
7.12
C++/C
C 1
C
1
2
2001
Page 56 of 56
C++/C v 1.0
8 C++
C C++overloadedinlineconst virtual
const
virtual
C++
8.1
8.1.1
C++
C++
8-1-1 EatBeef,EatFish,EatChicken Eat
void EatBeef();
//
void Eat(Beef );
void EatFish();
//
void Eat(Fish );
void EatChicken();
//
void Eat(Chicken );
8-1-1 Eat
C++ C++
9
8.1.2
2001
Page 57 of 57
C++/C v 1.0
void Function(void);
int
Function (void);
int
int
x = Function ();
Function C++/C
Function
8-1-1 Eat
_eat_beef_eat_fish_eat_chicken
C++ C
C
void foo(int x, int y);
C _foo C++_foo_int_int
C++
C C++ C externC
extern C
{
void foo(int x, int y);
//
}
extern C
{
#include myheader.h
// C
}
C++ foo C _foo
_foo_int_intC++ C externC
include
void Print();
//
class A
{
void Print();
2001
//
Page 58 of 58
C++/C v 1.0
}
Print Print
Print ::
::Print();
8.1.3
8-1-3 output int output float
# include <iostream.h>
void output( int x);
//
x = 1;
float y = 1.0;
//
output(x);
// output int 1
output(y);
// output float 1
output(1);
// output int 1
output(0.5);
output(int(0.5));
// output int 0
2001
Page 59 of 59
C++/C v 1.0
8.2
overrideC++
8.2.1
1
2
3
4virtual
1
2
3
4 virtual
8-2-1 Base::f(int) Base::f(float) Base::g(void)
Derived::g(void)
#include <iostream.h>
class Base
{
public:
void f(int x){ cout << "Base::f(int) " << x << endl; }
void f(float x){ cout << "Base::f(float) " << x << endl; }
virtual void g(void){ cout << "Base::g(void)" << endl;}
};
class Derived : public Base
{
public:
virtual void g(void){ cout << "Derived::g(void)" << endl;}
};
void main(void)
{
Derived
d;
2001
// Base::f(int) 42
Page 60 of 60
C++/C v 1.0
pb->f(3.14f);
// Base::f(float) 3.14
pb->g();
// Derived::g(void)
}
8-2-1
8.2.2
C++
1 virtual
2 virtual
8-2-2a
1 Derived::f(float) Base::f(float)
2 Derived::g(int) Base::g(float)
3 Derived::h(float) Base::h(float)
#include <iostream.h>
class Base
{
public:
virtual
void f(float x){ cout << "Base::f(float) " << x << endl; }
void g(float x){ cout << "Base::g(float) " << x << endl; }
void h(float x){ cout << "Base::h(float) " << x << endl; }
};
class Derived : public Base
{
public:
virtual
void f(float x){ cout << "Derived::f(float) " << x << endl; }
void g(int x){ cout << "Derived::g(int) " << x << endl; }
void h(float x){ cout << "Derived::h(float) " << x << endl; }
};
8-2-2a
C++
8-2-2bbp dp
2001
Page 61 of 61
C++/C v 1.0
void main(void)
{
Derived
d;
// Derived::f(float) 3.14
pd->f(3.14f);
// Derived::f(float) 3.14
// Base::g(float) 3.14
pd->g(3.14f);
// Derived::g(int) 3
(surprise!)
// Base::h(float) 3.14
pd->h(3.14f);
// Derived::h(float) 3.14
(surprise!)
}
8-2-2b
8.2.3
8-2-3 pd->f(10)
Base::f(int) Base::f(int) Derived::f(char *) 10
class Base
{
public:
void f(int x);
};
class Derived : public Base
{
public:
void f(char *str);
};
void Test(void)
{
Derived *pd = new Derived;
pd->f(10); // error
}
8-2-3
2001
Page 62 of 62
C++/C v 1.0
8-2-3
pd->f(10) Derived::f(char *)
Derived f
pd->f(10) f
8.3
C++
8-3-1
//
8-3-2
2001
Page 63 of 63
C++/C v 1.0
8-3-2
output
#include <iostream.h>
void output( int x);
void output( int x, float y=0.0);
void output( int x)
{
cout << " output int " << x << endl ;
}
void output( int x, float y)
{
cout << " output int " << x << " and float " << y << endl ;
}
void main(void)
{
int x=1;
float y=0.5;
//
output(x);
output(x,y);
}
8-3-2
8.4
8.4.1
C++ operator
2001
Page 64 of 64
C++/C v 1.0
Complex a, b, c;
c = Add(a, b);
//
c = a + b;
// +
[Murray ,
p44-p47] 8-4-1
= () [] ->
8-4-1
C++C
1
2
8.4.2
C++
1 C++ int,float
2..
3 C++#,@,$
8.5
8.5.1
2001
Page 65 of 65
C++/C v 1.0
C++
C
CALL return
#define MAX(a, b)
result = MAX(i, j) + 2 ;
#define MAX(a, b)
this
C++
C++ assert
assert Debug
Debug Release assert
assert Debug
Release assert
6.5
8.5.2
inline inline
Foo
inline void Foo(int x, int y);
2001
// inline
Page 66 of 66
C++/C v 1.0
}
Foo
void Foo(int x, int y);
inline void Foo(int x, int y) // inline
{
}
inline
inline inline
C++/C
class A
{
public:
void Foo(int x, int y) { }
//
//
class A
{
public:
void Foo(int x, int y)
}
//
inline void A::Foo(int x, int y)
{
}
8.5.3
2001
Page 67 of 67
C++/C v 1.0
1
2
inline
8.6
C++
C++
2001
Page 68 of 68
C++/C v 1.0
A
C++ A
//
A(void);
A(const A &a);
//
~A(void);
//
1
C++ Stroustrup
2
C++
String String
class String
{
public:
String(const char *str = NULL); //
String(const String &other);
//
//
~ String(void);
*m_data;
//
};
9.1
C C++C++
2001
Page 69 of 69
C++/C v 1.0
Stroustrup C++
Stroustrup
~
void
[Eekel, p55-p56]
9.2
{}
class A
{
A(int x);
// A
};
class B : public A
{
B(int x, int y);// B
};
B::B(int x, int y)
: A(x)
2001
// A
Page 70 of 70
C++/C v 1.0
}
const
5.4
class A
{
//
A(void);
A(const A &other);
//
// B
private:
A
m_a;
//
};
9-2(a) B A
m_a
9-2 (b) B m_a
B m_a
A A a m_a
B::B(const A &a)
: m_a(a)
B::B(const A &a)
{
m_a = a;
9-2(a)
9-2(b)
F
class F
{
2001
Page 71 of 71
C++/C v 1.0
public:
F(int x, int y);
//
private:
int m_x, m_y;
int m_i, m_j;
}
9-2(c) F 9-2(d) F
F::F(int x, int y)
: m_x(x), m_y(y)
F::F(int x, int y)
{
m_x = x;
m_i = 0;
m_y = y;
m_j = 0;
m_i = 0;
m_j = 0;
}
9-2(c)
9-2(d)
9.3
[Eckel, p260-261]
9.4 String
// String
String::String(const char *str)
{
if(str==NULL)
{
m_data = new char[1];
*m_data = \0;
}
2001
Page 72 of 72
C++/C v 1.0
else
{
int length = strlen(str);
m_data = new char[length+1];
strcpy(m_data, str);
}
}
// String
String::~String(void)
{
delete [] m_data;
// m_data delete m_data;
}
9.5
String
a(hello);
String
b(world);
String
c = a;
c = b;
// c(a);
//
String c(a)
2001
Page 73 of 73
C++/C v 1.0
9.6 String
//
String::String(const String &other)
{
// other m_data
int length = strlen(other.m_data);
m_data = new char[length+1];
strcpy(m_data, other.m_data);
}
//
String & String::operate =(const String &other)
{
// (1)
if(this == &other)
return *this;
// (2)
delete [] m_data;
// 3
int length = strlen(other.m_data);
m_data = new char[length+1];
strcpy(m_data, other.m_data);
// 4
return *this;
}
String 9.4
NULL NULL NULL
String
1 a = a
//
//
b = a;
b = &a;
2001
Page 74 of 74
C++/C v 1.0
c = b;
a = *b;
a = c;
delete
if
if(this == &other)
3 strlen
\0 strcpy \0
4 a = b = c
return *this return this return other
other other
return other
9.7
class A
{
private:
A(const A &a);
//
b(a); //
b = a;
//
2001
Page 75 of 75
C++/C v 1.0
9.8
virtual
#include <iostream.h>
class Base
{
public:
virtual ~Base() { cout<< "~Base" << endl ; }
};
class Derived : public Base
{
public:
virtual ~Derived() { cout<< "~Derived" << endl ; }
};
void main(void)
{
Base * pB = new Derived;
// upcast
delete pB;
}
~Derived
~Base
~Base
class Base
{
public:
// Base
private:
int
2001
Page 76 of 76
C++/C v 1.0
};
class Derived : public Base
{
public:
};
Derived & Derived::operate =(const Derived &other)
{
//1
if(this == &other)
return *this;
//2
Base::operate =(other);
//
//3
m_x = other.m_x;
m_y = other.m_y;
m_z = other.m_z;
//4
return *this;
}
9.9
C++Big-Three
2001
Page 77 of 77
C++/C v 1.0
10
ObjectClassInstance
C++
InheritanceComposition
COM CORBA C++
COM CORBA
10.1
A B A B A
class A
{
public:
void
Func1(void);
void
Func2(void);
};
class B : public A
{
public:
void
Func3(void);
void
Func4(void);
};
main()
{
B
b;
b.Func1();
// B A Func1
b.Func2();
// B A Func2
b.Func3();
b.Func4();
}
C++
2001
Page 78 of 78
C++/C v 1.0
10-1-1 A B B B
A
10-1-2 B A a kind of B A
ManHumanBoy
Man Human Boy Man
class Human
{
};
class Man : public Human
{
};
class Boy : public Man
{
};
10-1-2
OstrichBird Ostrich
Bird Ostrich::Fly
class Bird
{
public:
virtual void Fly(void);
};
class Ostrich : public Bird
{
};
CircleEllipse Circle
Ellipse
2001
Page 79 of 79
C++/C v 1.0
B A A
B B A
10.2
10-2-1 A B
a part of B A
A B
EyeNoseMouthEarHead
Head EyeNoseMouthEar 10-2-1
class Eye
class Nose
{
public:
void
public:
Look(void);
void
};
};
class Mouth
class Ear
{
public:
void
Smell(void);
public:
Eat(void);
void
};
Listen(void);
};
//
class Head
{
public:
void
Look(void)
m_eye.Look();
void
Smell(void) {
m_nose.Smell();
void
Eat(void)
m_mouth.Eat();
void
Listen(void) {
m_ear.Listen();
private:
Eye
m_eye;
Nose
m_nose;
Mouth
m_mouth;
Ear
m_ear;
};
10-2-1 Head EyeNoseMouthEar
2001
Page 80 of 80
C++/C v 1.0
SmellEatListen 10-2-2
//
class Head : public Eye, public Nose, public Mouth, public Ear
{
};
10-2-2
Head EyeNoseMouthEar
2001
Page 81 of 81
C++/C v 1.0
11
11.1 const
const C++ const
const const
const constant
const
C++
Use const
whenever you need
11.1.1 const
const
const
const
StringCopy
void StringCopy(char *strDestination, const char *strSource);
strSource strDestination strSource const
strSource
const
void Func1(int x) void Func1(const int x) void
Func2(A a) void Func2(const A a) A
void Func(A a)
A a
a const
void Func(const A &a)
void Func(int x) void Func(const int &x)
Page 82 of 82
C++/C v 1.0
const
void Func(A a) void Func(const A &a)
const
void Func(int x)
void Func(const int &x)
11-1-1 const &
11.1.2 const
const
const
const
int GetInt(void) const int GetInt(void)
A GetA(void) const A GetA(void) A
6.2
class A
{
A & operate = (const A &other); //
};
A a, b, c;
// a, b, c A
a = b = c;
2001
//
Page 83 of 83
C++/C v 1.0
//
(a = b) = c;
const
a = b = c (a = b) = c
11.1.3 const
const const
const
Push(int elem);
int Pop(void);
int
GetCount(void)
const;
// const
private:
int
m_num;
int
m_data[100];
};
int Stack::GetCount(void)
const
{
++ m_num;
// m_num
Pop();
// const
return m_num;
}
const const
11.2
11-2-1
2001
Page 84 of 84
C++/C v 1.0
11-2-2
11-2-3
11-2-4
11-2-5
11-2-6
11.3
11-3-1
||&&<=>=
1
11-3-2
11-3-3
11-3-4
11-3-5
11-3-6
11-3-7 I/O
11-3-8
11-3-9
11-3-10
2001
Page 85 of 85
C++/C v 1.0
11-3-11
11-3-12
11-3-13
11-3-14 PC-LintLogiScope
2001
Page 86 of 86
C++/C v 1.0
[Cline] Marshall P. Cline and Greg A. Lomow, C++ FAQs, Addison-Wesley, 1995
[Eckel] Bruce Eckel, Thinking in C++C++
2000
[Maguire] Steve Maguire, Writing Clean Code
1993
2001
Page 87 of 87
C++/C v 1.0
A C++/C
ifndef/define/endif ?
{ }
Ifforwhiledo
{}
min-length
&&
max-information
2001
Page 88 of 88
C++/C v 1.0
if ?
1 TRUEFALSE 10
2===
3=== NULL
Case break
switch default
goto ?
C++ const
const const
2001
Page 89 of 89
C++/C v 1.0
return
assert
assert
return
const const
Use const
whenever you need
malloc new
NULL NULL
1
2 free delete
NULL
malloc/free new/delete
malloc
new/delete
C++
2001
Page 90 of 90
C++/C v 1.0
C++
12
34
12
3
4 *this
3 virtual
1 B A A
B B A
2 A B
a part of
B A A B
2001
Page 91 of 91
C++/C v 1.0
I/O
2001
Page 92 of 92
C++/C v 1.0
B C++/C
C++/C C++/C
C++/C
90
BOOL , float, if 10
0, 0.0 , FALSE int n
if
if ( n == 0 )
if ( n != 0 )
BOOL
flag if
float
x if
char
*p if
str[] = Hello ;
char
*p = str ;
int
n = 10;
sizeof( str ) =
sizeof (str ) =
sizeof ( p ) =
sizeof ( n ) =
2001
sizeof ( p ) =
Page 93 of 93
C++/C v 1.0
25
1 ifndef/define/endif
2#include
<filename.h>
#include
filename.h
3const
4 C++ C extern C
5 for
//
//
if (condition)
{
if (condition)
DoSomething();
else
}
DoOtherthing();
DoSomething();
else
{
for (i=0; i<N; i++)
DoOtherthing();
}
2001
Page 94 of 94
C++/C v 1.0
20
char *GetMemory(void)
{
p = (char *)malloc(100);
return p;
void Test(void)
void Test(void)
char *str = NULL;
GetMemory(str);
str = GetMemory();
printf(str);
printf(str);
Test
Test
void Test(void)
{
*p = (char *)malloc(num);
strcpy(str, hello);
void Test(void)
free(str);
if(str != NULL)
char *str = NULL;
GetMemory(&str, 100);
strcpy(str, world);
strcpy(str, "hello");
printf(str);
printf(str);
Test
Test
2001
Page 95 of 95
C++/C v 1.0
strcpy 10
strcpy
char *strcpy(char *strDest, const char *strSrc);
strDest strSrc
1 C++/C strcpy
String 25
String
class String
{
public:
String(const char *str = NULL); //
String(const String &other);
~ String(void);
//
//
*m_data;
//
};
String 4
2001
Page 96 of 96
C++/C v 1.0
C C++/C
BOOL , float, if 10
BOOL
flag if 3
if ( flag )
if (flag == TRUE)
if ( !flag )
if (flag == 1 )
if (flag == FALSE)
if (flag == 0)
float
x if 4
if (x == 0.0)
===
if (x != 0.0)
>=<=
char
*p if 3
if (p == NULL)
if (p == 0)
if (p != NULL)
if (p != 0)
if (p)
if (!)
str[] = Hello ;
char
*p = str ;
int
n = 10;
sizeof( str ) =
sizeof (str ) =
sizeof ( p ) =
sizeof ( n ) =
2001
sizeof ( p ) =
Page 97 of 97
C++/C v 1.0
25
1 ifndef/define/endif 5
2#include
<filename.h>
#include
#include
#include
filename.h 5
<filename.h> filename.h
filename.h filename.h
3const 5
1 const
2const const
4 C++ C extern C 5
C++C C++
C void foo(int x, int y);
C _foo C++
_foo_int_int
C++ C externC
5 for 5
for (i=0; i<N; i++)
if (condition)
{
if (condition)
DoSomething();
else
DoSomething();
}
DoOtherthing();
}
else
{
for (i=0; i<N; i++)
DoOtherthing();
}
N-1
2001
Page 98 of 98
C++/C v 1.0
5 20
void GetMemory(char *p)
char *GetMemory(void)
{
p = (char *)malloc(100);
return p;
void Test(void)
void Test(void)
char *str = NULL;
GetMemory(str);
str = GetMemory();
printf(str);
printf(str);
Test
Test
GetMemory
GetMemory
NULL
void Test(void)
{
*p = (char *)malloc(num);
strcpy(str, hello);
void Test(void)
free(str);
if(str != NULL)
char *str = NULL;
GetMemory(&str, 100);
strcpy(str, world);
strcpy(str, "hello");
printf(str);
printf(str);
Test
Test
1 hello
free(str);str
if(str != NULL)
strcpy 10
2001
Page 99 of 99
C++/C v 1.0
strcpy
char *strcpy(char *strDest, const char *strSrc);
strDest strSrc
1 C++/C strcpy
char *strcpy(char *strDest, const char *strSrc);
{
assert((strDest!=NULL) && (strSrc !=NULL)); // 2
char *address = strDest;
// 2
// 2
NULL ;
return address ;
// 2
}
2strcpy strSrc strDest char *
// 2
String 25
String
class String
{
public:
String(const char *str = NULL); //
String(const String &other);
~ String(void);
//
//
*m_data;
//
};
String 4
// String
String::~String(void)
// 3
{
delete [] m_data;
// m_data delete m_data;
}
// String
2001
C++/C v 1.0
// 6
{
if(str==NULL)
{
m_data = new char[1];
// NULL
*m_data = \0;
}
else
{
int length = strlen(str);
m_data = new char[length+1];
// NULL
strcpy(m_data, str);
}
}
//
String::String(const String &other)
// 3
{
int length = strlen(other.m_data);
m_data = new char[length+1];
// NULL
strcpy(m_data, other.m_data);
}
//
String & String::operate =(const String &other)
// 13
{
// (1)
// 4
if(this == &other)
return *this;
// (2)
// 3
delete [] m_data;
// 3 // 3
int length = strlen(other.m_data);
m_data = new char[length+1];
// NULL
strcpy(m_data, other.m_data);
// 4
// 3
return *this;
}
2001