C++程序设计教程
复习
C语言重要概念
? 常量与变量
? 数组 []
? 选择 if … else …
? switch case
? 指针 pointer
? 结构 struct
? 静态变量 static
比 C语言更好
? 输入 /输出流 cout << a; cin >> b;
? 动态内存分配和释放 new delete
? 内联函数 inline
? 运算符概念 + - * / %
? 引用的概念 int&
? const 限定符
? 函数重载
?
类的概念
? public,protected,private
? 构造函数:默认构造函数、拷贝构造函
数、默认形参
? 析构函数:唯一性、设为虚函数
? 继承
? 运算符
? 友元
? 虚函数
软件学习过程
C
编程语言 计算机系统 数据库 数据结构 软件工程
C++
Java
系统
组成
网络
数据库
原理
Acess
FoxPro
SQL
软件设
计
可行性
分析
概要设
计
详细设
计
软件测
试
验收
软件开发人员分类
岗位名称 岗位要求
网页设计师 HTML,CSS,ASP/JSP+JScrip
网络开发工程师 Java,网页设计技术,数据库开发技术
软件测试工程师 VC++,软件测试技术
软件界面工程师 VC++,软件设计技术,界面开发技术
高级多媒体开发工程
师
VC++,软件设计技术,多媒体开发技术
( DirectX)
游戏开发工程师 VC++,软件设计技术,动画开发技术
( DirectX)
软件算法工程师 VC++,数学,软件设计技术,某领域的算
法实现技术
系统分析员 VC++,软件设计技术,软件工程
例 1 class Array {
friend ostream& operator << (ostream&,const Array&);
friend istream& operator >> (istream&,Array&);
public,
Array (int arraySize=10); // default constructor
Array (const Array&); // copy constructor
~Array (); // destructor
int getSize () const { return size; }
const Array& operator = (const Array&); // evaluate the array
int operator == (const Array&) const; // compare equivalency of arrays,
int operator != (const Array&) const; // compare inequality of arrays,
int& operator [] (int); // subscript operator
static int getArrayCount (); // return the number of instantiation array,
private,
int* ptr; // pointer to the first element of the array,
int size;
static int arrayCount; // the number of instantiation array,
};
例 1 // initialize the static data member,int Array::arrayCount = 0;
// return the number of instantiation array,
int Array::getArrayCount () { return arrayCount; }
// constructor
Array::Array(int arraySize)
{
++arrayCount; // counter increase,
size = arraySize; // default size of the array is 10,
ptr = new int [size];
assert(ptr != 0);
// to make sure if allocate memory is success
for (int i=0; i < size; i++) // initialize the array,
ptr[i] = 0;
}
例 1
// constructor
Array::Array (const Array& init)
{
++arrayCount; // counter increase,
size = init.size; // default size of the array is 10,
ptr = new int [size];
assert(ptr != 0);
// to make sure if allocate memory is success
for (int i=0; i < size; i++) // initialize the array,
ptr[i] = init.ptr[i];
}
// destructor
Array::~Array ()
{
--arrayCount; // counter decrease,
delete [] ptr; // release the memory
}
例 1
// overload evaluate operator
const Array& Array::operator = (const Array& right)
{
if ( &right != this )
{
delete[] ptr; // release current memory,
size = right.size;
ptr = new int [size];
assert (ptr != 0);
for ( int i=0; i < size; i++ )
ptr[i] = right.ptr[i];
}
return *this;
}
例 1 // overloading subscript operator int& Array::operator [] (int subscript)
{
// check if subscript is overflow
assert ( 0 <= subscript && subscript < size );
return ptr [subscript];
// return the reference for left value,
}
// compare equivalency of two arrays,
int Array::operator == (const Array& right) const
{
if ( size != right.size )
// return 0 if size is not equal,
return 0;
for (int i=0; i < size; i++ )
if ( ptr[i] != right.ptr[i] )
return 0; // They're not equal,
return 1; // They're the equal,
}
例 1
istream& operator >> (istream& input,Array& a)
{
for (int i=0; i < a.size; i++ )
input >> a.ptr[i];
return input; // can execute,cin >> x >> y;
}
ostream& operator << (ostream& output,const Array& a)
{
for (int i=0; i < a.size; i++ )
{
output << a.ptr[i] << " ";
if ( (i+1)%10 == 0 )
output << endl;
}
if ( i%10 != 0 )
output << endl;
return output; // can execute,cin >> x >> y;
}
例 2:单向链表
struct listNode
{
char data;
listNode *nextPtr;
};
class List
{
public,
List();
void insertNode (char);
char deleteNode (char);
int isEmpty ();
private,
listNode* startNodePtr;
};
? 建立 List 类
? 首先理解 C语言程序
struct listNode {
char data;
struct listNode* nextPtr;
}
? 该结构定义了链表中的一个结点。
listNode
data
nextPtr
listNode
data
nextPtr
listNode
data
nextPtr
listNode
data
nextPtr
NULL
class List
{ private,
listNode* startNodePtr;
};
链表的第一个结点
? insert 在链表中插入新的结点,
listNode
‘a’
nextPtr
listNode
‘b’
nextPtr
listNode
‘d’
nextPtr
listNode
‘e’
nextPtr
NULL
listNode
‘c’
nextPtr
newPtr
1) newPtr = new listNode;
2) newPtr->data = data;
3) previousPtr->nextPtr = newPtr;
4) newPtr->nextPtr = currentPtr;
previousPtr
currentPtr
创建新结点
? delete 在链表中删除一个结点,
listNode
‘a’
nextPtr
listNode
‘b’
nextPtr
listNode
‘c’
nextPtr
listNode
‘d’
nextPtr
NULL
1) tempPtr = currentPtr;
2) previousPtr->nextPtr = currentPtr->nextPtr;
3) delete tempPtr;
previousPtr currentPtr
?
复习
C语言重要概念
? 常量与变量
? 数组 []
? 选择 if … else …
? switch case
? 指针 pointer
? 结构 struct
? 静态变量 static
比 C语言更好
? 输入 /输出流 cout << a; cin >> b;
? 动态内存分配和释放 new delete
? 内联函数 inline
? 运算符概念 + - * / %
? 引用的概念 int&
? const 限定符
? 函数重载
?
类的概念
? public,protected,private
? 构造函数:默认构造函数、拷贝构造函
数、默认形参
? 析构函数:唯一性、设为虚函数
? 继承
? 运算符
? 友元
? 虚函数
软件学习过程
C
编程语言 计算机系统 数据库 数据结构 软件工程
C++
Java
系统
组成
网络
数据库
原理
Acess
FoxPro
SQL
软件设
计
可行性
分析
概要设
计
详细设
计
软件测
试
验收
软件开发人员分类
岗位名称 岗位要求
网页设计师 HTML,CSS,ASP/JSP+JScrip
网络开发工程师 Java,网页设计技术,数据库开发技术
软件测试工程师 VC++,软件测试技术
软件界面工程师 VC++,软件设计技术,界面开发技术
高级多媒体开发工程
师
VC++,软件设计技术,多媒体开发技术
( DirectX)
游戏开发工程师 VC++,软件设计技术,动画开发技术
( DirectX)
软件算法工程师 VC++,数学,软件设计技术,某领域的算
法实现技术
系统分析员 VC++,软件设计技术,软件工程
例 1 class Array {
friend ostream& operator << (ostream&,const Array&);
friend istream& operator >> (istream&,Array&);
public,
Array (int arraySize=10); // default constructor
Array (const Array&); // copy constructor
~Array (); // destructor
int getSize () const { return size; }
const Array& operator = (const Array&); // evaluate the array
int operator == (const Array&) const; // compare equivalency of arrays,
int operator != (const Array&) const; // compare inequality of arrays,
int& operator [] (int); // subscript operator
static int getArrayCount (); // return the number of instantiation array,
private,
int* ptr; // pointer to the first element of the array,
int size;
static int arrayCount; // the number of instantiation array,
};
例 1 // initialize the static data member,int Array::arrayCount = 0;
// return the number of instantiation array,
int Array::getArrayCount () { return arrayCount; }
// constructor
Array::Array(int arraySize)
{
++arrayCount; // counter increase,
size = arraySize; // default size of the array is 10,
ptr = new int [size];
assert(ptr != 0);
// to make sure if allocate memory is success
for (int i=0; i < size; i++) // initialize the array,
ptr[i] = 0;
}
例 1
// constructor
Array::Array (const Array& init)
{
++arrayCount; // counter increase,
size = init.size; // default size of the array is 10,
ptr = new int [size];
assert(ptr != 0);
// to make sure if allocate memory is success
for (int i=0; i < size; i++) // initialize the array,
ptr[i] = init.ptr[i];
}
// destructor
Array::~Array ()
{
--arrayCount; // counter decrease,
delete [] ptr; // release the memory
}
例 1
// overload evaluate operator
const Array& Array::operator = (const Array& right)
{
if ( &right != this )
{
delete[] ptr; // release current memory,
size = right.size;
ptr = new int [size];
assert (ptr != 0);
for ( int i=0; i < size; i++ )
ptr[i] = right.ptr[i];
}
return *this;
}
例 1 // overloading subscript operator int& Array::operator [] (int subscript)
{
// check if subscript is overflow
assert ( 0 <= subscript && subscript < size );
return ptr [subscript];
// return the reference for left value,
}
// compare equivalency of two arrays,
int Array::operator == (const Array& right) const
{
if ( size != right.size )
// return 0 if size is not equal,
return 0;
for (int i=0; i < size; i++ )
if ( ptr[i] != right.ptr[i] )
return 0; // They're not equal,
return 1; // They're the equal,
}
例 1
istream& operator >> (istream& input,Array& a)
{
for (int i=0; i < a.size; i++ )
input >> a.ptr[i];
return input; // can execute,cin >> x >> y;
}
ostream& operator << (ostream& output,const Array& a)
{
for (int i=0; i < a.size; i++ )
{
output << a.ptr[i] << " ";
if ( (i+1)%10 == 0 )
output << endl;
}
if ( i%10 != 0 )
output << endl;
return output; // can execute,cin >> x >> y;
}
例 2:单向链表
struct listNode
{
char data;
listNode *nextPtr;
};
class List
{
public,
List();
void insertNode (char);
char deleteNode (char);
int isEmpty ();
private,
listNode* startNodePtr;
};
? 建立 List 类
? 首先理解 C语言程序
struct listNode {
char data;
struct listNode* nextPtr;
}
? 该结构定义了链表中的一个结点。
listNode
data
nextPtr
listNode
data
nextPtr
listNode
data
nextPtr
listNode
data
nextPtr
NULL
class List
{ private,
listNode* startNodePtr;
};
链表的第一个结点
? insert 在链表中插入新的结点,
listNode
‘a’
nextPtr
listNode
‘b’
nextPtr
listNode
‘d’
nextPtr
listNode
‘e’
nextPtr
NULL
listNode
‘c’
nextPtr
newPtr
1) newPtr = new listNode;
2) newPtr->data = data;
3) previousPtr->nextPtr = newPtr;
4) newPtr->nextPtr = currentPtr;
previousPtr
currentPtr
创建新结点
? delete 在链表中删除一个结点,
listNode
‘a’
nextPtr
listNode
‘b’
nextPtr
listNode
‘c’
nextPtr
listNode
‘d’
nextPtr
NULL
1) tempPtr = currentPtr;
2) previousPtr->nextPtr = currentPtr->nextPtr;
3) delete tempPtr;
previousPtr currentPtr
?