[]
[
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 101
C++/C v 1.0
.......................................................................................................................................6
1 ....................................................................................................................8
1.1 ........................................................................................................8
1.2 ...............................................................................................................8
1.3 ...........................................................................................................8
1.4 ...............................................................................................................8
1.5 .......................................................................................................................8
2 ................................................................................................................8
2.1 ...............................................................................................................................8
2.2 ...........................................................................................................................8
2.3 ...........................................................................................................8
2.4 ...............................................................................................................................8
2.5 .......................................................................................................................8
2.6 ...............................................................................................................8
2.7 ...............................................................................................................................8
2.8 .......................................................................................................................8
3 ....................................................................................................................8
3.1 .......................................................................................................................8
3.2 WINDOWS .........................................................................8
3.3 U NIX ..................................................................................8
4 ....................................................................................................8
4.1 ...........................................................................................................8
4.2 ...................................................................................................................8
4.3 IF ...........................................................................................................................8
4.4 ...........................................................................................................8
4.5 FOR ............................................................................................8
4.6 SWITCH ..................................................................................................................8
4.7 GOTO ......................................................................................................................8
5 ............................................................................................................................8
5.1 ...........................................................................................................8
5.2 CONST # DEFINE ...........................................................................................8
5.3 ...............................................................................................................8
5.4 ...................................................................................................................8
6 ....................................................................................................................8
2001
Page 3 of 101
C++/C v 1.0
6.1 ...................................................................................................................8
6.2 ...............................................................................................................8
6.3 ....................................................................................................8
6.4 .......................................................................................................................8
6.5 .......................................................................................................................8
6.6 ........................................................................................................8
7 ....................................................................................................................8
7.1 ................................................................................................................8
7.2 .............................................................................................8
7.3 ........................................................................................................8
7.4 .....................................................................................8
7.5 FREE DELETE .................................................................................8
7.6 ........................................................................................8
7.7 ...........................................................................................................8
7.8 MALLOC /FREE NEW /DELETE .......................................................8
7.9 ........................................................................................................8
7.10 MALLOC /FREE .........................................................................................8
7.11 NEW /DELETE ...........................................................................................8
7.12 .............................................................................................................8
8 C++ .................................................................................................8
8.1 ...........................................................................................................8
8.2 ....................................................................................8
8.3 ...............................................................................................................8
8.4 ...................................................................................................................8
8.5 .......................................................................................................................8
8.6 ...............................................................................................................8
9 .....................................................................8
9.1 ........................................................................................8
9.2 ....................................................................................................8
9.3 ........................................................................................................8
9.4 S TRING ..................................................................8
9.5 ............................................................................8
9.6 S TRING ..........................................................8
9.7 .................................................................8
9.8 ............................................................................8
9.9 ...............................................................................................................8
10 ......................................................................................................8
2001
Page 4 of 101
C++/C v 1.0
10.1 .............................................................................................................................8
10.2 .............................................................................................................................8
11 ..........................................................................................................8
11.1 CONST ..................................................................................8
11.2 ..........................................................................................................8
11.3 ..........................................................................................................8
.................................................................................................................................8
A C++/C ................................................................................................8
B C++/C ............................................................................................................8
C C++/C .............................................................................8
2001
Page 5 of 101
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 101
C++/C v 1.0
1995 2000
10 C++ 3D
3D
strcpy
1
2
3
IT
IT
2001
Page 7 of 101
C++/C v 1.0
10 if
14
C++/C
IT
1
2
1
2
3
2001
Page 8 of 101
C++/C v 1.0
B C++/C
3 85 C++/C
C++/C
Bug
CMMI
CMMI
2001
Page 9 of 101
C++/C v 1.0
C++/C
1
2
3
2002 7 CMMI 3
1000
2001 7
2001
Page 10 of 101
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
*
* 2001720
*
* 1.0
*
* 2001510
*/
1-1
2001
Page 11 of 101
C++/C v 1.0
1.2
1 1-1
2
3
graphics.h 1-2
z
1-2-1 ifndef/define/endif
1-2-1
C++
// 1-1
#ifndef
GRAPHICS_H // graphics.h
#define
GRAPHICS_H
#include <math.h>
//
#include myheader.h
//
void Function1(); //
class Box
//
};
#endif
1-2 C++/C
2001
Page 12 of 101
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 101
C++/C v 1.0
1.5
include source
2001
Page 14 of 101
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 101
C++/C v 1.0
2.2
z
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();
dosomething();
other();
}
//
other();
2-2(a)
2-2(b)
2-2-1
2001
// width
// height
// depth
Page 16 of 101
C++/C v 1.0
2.3
z
2-3-1 constvirtualinlinecase
ifforwhile
2-3-2
2-3-3;
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))
//
//
//
if(year>=2000)
//
//
if(a>=b&&c<=d)
//
//
for(i=0;i<10;i++)
//
//
x = a < b ? a : b;
//
x=a<b?a:b;
//
int *x = &y;
//
int * x = & y;
//
array[5] = 0;
// array [ 5 ] = 0;
a.Function();
// a . Function();
b->Function();
// b -> Function();
2-3
2001
Page 17 of 101
C++/C v 1.0
2.4
z
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 101
C++/C v 1.0
2.5
z
2-5-1 70 80
2-5-2
2.6
*
* int*
x; x
int
int*
x, y; y
x y
z
2-6-1 *
2001
char
*name;
int
*x, y;
// y
Page 19 of 101
C++/C v 1.0
2.7
C /**/C++/**/
//
1
2
3
2-6
z
2-7-1
2-7-2
i++;
// i 1
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 101
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:
void Func1(void);
int
i, j;
void Func2(void);
float
x, y;
}
8.3(a)
2001
private:
8.3(b)
Page 21 of 101
C++/C v 1.0
3
Microsoft
ch p ppch
int
i,
j,
k;
float
x,
y,
z;
int
iI,
iJ,
ik;
// i int
float
fX,
fY,
fZ;
// f float
3.1
3.2
z
3-1-1
CurrentValue
NowValue
z
! maxval maxValueUntilOverflow
i,j,k,m,n,x,y,z
3-1-3
Windows AddChild
Unix add_child
2001
Page 22 of 101
C++/C v 1.0
3-1-4
int
x,
X;
// x X
// foo FOO
3-1-5
3-1-6
float
value;
float
oldValue;
float
newValue;
3-1-7
DrawBox();
//
box->Draw();
z
//
3-1-8
int minValue;
int maxValue;
int SetValue();
int GetValue();
3-1-1 Value1,Value2
3.2 Windows
Windows
2001
Page 23 of 101
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
3-2-4 s_ static
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 101
C++/C v 1.0
3-2-7
OpenGL
gl GL
3.3 Unix
2001
Page 25 of 101
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 101
C++/C v 1.0
4.2
a = b = c = 0
1
2
z
4-2-1
//
4-2-2
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
z
4-3-1 TRUEFALSE 10
FALSE
2001
// flag
Page 27 of 101
C++/C v 1.0
if (!flag) // flag
if (flag == TRUE)
if (flag == 1 )
if (flag == FALSE)
if (flag == 0)
4.3.2
z
4-3-2=== 0
value if
if (value == 0)
if (value != 0)
if (value)
// value
if (!value)
4.3.3
z
4-3-3===
float double
===>=<=
x
if (x == 0.0)
//
4-3-4=== NULL
NULL NULL 0
p if
if (p == NULL) // 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 101
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)
2001
}
4-4(b)
4-4-2
Page 29 of 101
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
z
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 101
C++/C v 1.0
switch if
if switch
switch
switch (variable)
{
case value1 :
break;
case value2 :
break;
default :
break;
}
z
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 101
C++/C v 1.0
}
}
}
error:
goto
2001
Page 32 of 101
C++/C v 1.0
5
C #define
C++ #define const const
5.1
2
3
z
5-1-1
#define
MAX
const int
const float
100
/*
*/
MAX = 100;
//
C++ const
PI = 3.14159;
//
C++ const
1 const
2 const
5.3
z
5-3-1
2001
Page 33 of 101
C++/C v 1.0
5-3-2
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
const
class A
{
enum { SIZE1 = 100, SIZE2 = 200}; //
2001
Page 34 of 101
C++/C v 1.0
int array1[SIZE1];
int array2[SIZE2];
};
PI=3.14159
2001
Page 35 of 101
C++/C v 1.0
6
C++/C
C
pass by valuepass by pointerC++
pass by reference
6.6
6.1
z
6-1-1
void
//
//
float GetValue(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); //
z
6-1-3 const
2001
Page 36 of 101
C++/C v 1.0
6-1-4const &
6-1-1 5
6-1-2
C printf
int printf(const chat *format[, argument]);
6.2
z
6-2-1
C
void
C++ C++
C C++/ C
void
z
6-2-2
C getchar
char c;
c = getchar();
if (c == EOF)
getchar c char
6-2-3
return
C getchar int
2001
Page 37 of 101
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 101
C++/C v 1.0
// *this
}
String
return *this
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 101
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 101
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 101
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 101
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 101
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 101
C++/C v 1.0
1 1 for
malloc free
new/delete
2 return
7-2-2
7-2-3 1 1
7-2-4
7.3
C++/C
2001
Page 45 of 101
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 101
C++/C v 1.0
7.3.3
sizeof 7-3-3asizeof(a)
120 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;
7.4
7-4-1
Test GetMemory(str, 200) str str NULL
// str NULL
strcpy(str, "hello"); //
}
7-4-1
2001
Page 47 of 101
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 101
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 101
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 101
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 101
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
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 101
C++/C v 1.0
malloc/free new/delete
malloc/free
new/delete
new/delete malloc/free C++ malloc/free
C++ C C malloc/free
free new
delete malloc
new/delete malloc/free
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);
}
}
3 new malloc Visual C++_set_new_hander
2001
Page 53 of 101
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);
malloc length
2001
Page 54 of 101
C++/C v 1.0
int
sizeof
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 :
Obj(void);
2001
//
Page 55 of 101
C++/C v 1.0
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 101
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 101
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 101
C++/C v 1.0
}
Print
Print Print ::
::Print();
8.1.3
8-1-3 output int output
float
output(0.5) 0.5
int 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);
}
8-1-3
2001
Page 59 of 101
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 101
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 101
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 101
C++/C v 1.0
8-2-3
pd->f(10) Derived::f(char *)
Derived f
pd->f(10) f
Derived
class Derived : public Base
{
public:
void f(char *str);
void f(int x) { Base::f(x); }
};
8.3
C++
8-3-1
//
//
8-3-2
2001
Page 63 of 101
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 101
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 101
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 101
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 101
C++/C v 1.0
1
2
inline
8.6
C++
C++
2001
Page 68 of 101
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 101
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)
// A
const
5.4
2001
Page 70 of 101
C++/C v 1.0
class A
{
A(void);
//
A(const A &other);
//
//
}
class B
{
public:
B(const A &a); // 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)
B::B(const A &a)
: m_a(a)
m_a = a;
9-2(a)
9-2(b)
F
class F
{
public:
F(int x, int y);
//
private:
int m_x, m_y;
int m_i, m_j;
2001
Page 71 of 101
C++/C v 1.0
}
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;
}
else
{
int length = strlen(str);
m_data = new char[length+1];
strcpy(m_data, str);
2001
Page 72 of 101
C++/C v 1.0
}
}
// String
String::~String(void)
{
delete [] m_data;
// m_data delete m_data;
}
9.5
String
a(hello);
String
b(world);
String
c = a; // c(a);
c = b; //
String c(a)
9.6 String
//
String::String(const String &other)
{
2001
Page 73 of 101
C++/C v 1.0
// 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;
c = b;
a = *b;
a = c;
2001
Page 74 of 101
C++/C v 1.0
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;
//
//
9.8
2001
Page 75 of 101
C++/C v 1.0
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:
};
class Derived : public Base
{
public:
2001
Page 76 of 101
C++/C v 1.0
// Derived
private:
int
};
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 101
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 101
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 101
C++/C v 1.0
B A A
B B A
10.2
z
10-2-1 A B
a part of B A
A B
EyeNoseMouthEarHead
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
Ear
m_mouth;
m_ear;
};
10-2-1 Head EyeNoseMouthEar
2001
Page 80 of 101
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 101
C++/C v 1.0
11
11.1 const
const C++ const
const const
const
const
const
StringCopy
void StringCopy(char *strDestination, const char *strSource);
const
void Func1(int x) void Func1(const int x)
void Func(A a)
A a
Page 82 of 101
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 101
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 101
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 101
C++/C v 1.0
11-3-11
11-3-12
11-3-13
11-3-14 PC-LintLogiScope
2001
Page 86 of 101
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
[Meyers] Scott Meyers, Effective C++, Addison-Wesley, 1992
[Murry] Robert B. Murry, C++ Strategies and Tactics, Addison-Wesley, 1993
[Summit] Steve Summit, C Programming FAQs, Addison-Wesley, 1996
2001
Page 87 of 101
C++/C v 1.0
A C++/C
ifndef/define/endif ?
{ }
Ifforwhiledo
{}
min-length
&&
max-information
2001
Page 88 of 101
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 101
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 101
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 101
C++/C v 1.0
I/O
2001
Page 92 of 101
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 101
C++/C v 1.0
25
1 ifndef/define/endif
2#include
<filename.h>
filename.h
#include
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 101
C++/C v 1.0
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
void Test(void)
{
char *str = (char *) malloc(100);
*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 101
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(void);
//
*m_data;
//
};
String 4
2001
Page 96 of 101
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 101
C++/C v 1.0
25
1 ifndef/define/endif 5
2#include
<filename.h>
#include
#include
filename.h 5
#include
<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 101
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)
2001
Page 99 of 101
C++/C v 1.0
strcpy 10
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
// 2
// 2
NULL ;
return address ;
// 2
}
2strcpy strSrc strDest char *
// 2
String 25
String
class String
{
public:
String(const char *str = NULL);
//
//
~ String(void);
//
*m_data;
//
};
String 4
// String
String::~String(void)
// 3
{
delete [] m_data;
// m_data delete m_data;
}
2001
C++/C v 1.0
// String
String::String(const char *str)
// 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
return *this;
}
2001Flyincloud
// 3