VisualC++第0章课件
- 格式:pdf
- 大小:159.69 KB
- 文档页数:22
第0章 C++基础知识
0.1 C++的发展历程
C语言:
1973,Ritchie为描述和实现UNIX操作系统发明C++语言:
1980年代,Bjarne Stroustrup发明
系统描述语言,应用软件开发语言
面向对象,面向过程
第0章 C++基础知识
0.2 基本数据类型
类型说明字节数值域
[-128,127] char字符型 1
signed char有符号字符型 1 [-128,127] unsigned char无符号字符型 1 [0,255]
[-32768,32767] short int 短整型 2
signed short int 有符号短整型 2 [-32768,32767] unsigned short int 无符号短整型 2 [0,65535]
第0章 C++基础知识
0.2 基本数据类型
类型说明字节数值域
[-2^31,2^31-1] int整型 4
[-2^31,2^31-1] signed int有符号整型 4
unsigned int无符号整型 4 [0,2^32-1]
long int 长整型 4
[-2^31,2^31-1] signed long int 有符号长整型 4 [-2^31,2^31-1] unsigned long int 无符号长整型 4 [0,2^32-1]
第0章 C++基础知识
0.2 基本数据类型
类型说明字节数值域
7位有效位float浮点型 4 double双精度型 8
15位有效位
19位有效位long double长双精度型 10
第0章 C++基础知识
0.3 复合数据类型
1、数组
2、结构体 struct
3、共用体 union
4、枚举 enum
5、用户自定义类型 typedef
第0章 C++基础知识
0.4 变量----匈牙利命名法
小写字母做为变量名前缀说明类型,其余部分描述变量意义与功能
前缀类型说明
ch char 字符
b BOOL
布尔值
n(l) int 整数
第0章 C++基础知识
0.4 变量----匈牙利命名法
前缀类型说明
w WORD
16位无符号整数dw DWORD
32位无符号数
lpsz LPTSTR
指向字符串的32位指针
h Handle
窗口对象的句柄
第0章 C++基础知识
0.5 指针----内存管理
1、静态内存
static 全局变量
2、栈
stack 局部变量
3、堆
heap 动态内存管理
C: malloc,free函数C++: new,delete操作符
第0章 C++基础知识
0.6 函数
函数声明 Declaration
类型标识符函数名(形参列表)函数定义 Defination
类型标识符函数名(形参列表)
{
函数体
}
第0章 C++基础知识
0.7 类与对象
类class 数据类型模板
对象(实例) object(instance) 数据类型变量重点理解
缺省的无参数构造函数
缺省的析构函数
缺省的拷贝构造函数
缺省的赋值函数
第0章 C++基础知识
0.7 类与对象
程序员为什么要编写这几个成员函数?
(1)如果使用“缺省的无参数构造函数”和“缺省的析构函数”,等于放弃了自主“初始化”和“清除”的机会,C++发明人Stroustrup的好心好意白费了。
(2)“缺省的拷贝构造函数”和“缺省的赋值函数”均采用“位拷贝”而非“值拷贝”的方式来实现,倘若类中含有指针变量,这两个函数注定将出错。
第0章 C++基础知识
0.7 类与对象
class String
{
public:
String(const char *str = NULL); // 普通构造函数
String(const String &other); // 拷贝构造函数
~ String(void); // 析构函数
String & operate =(const String &other); // 赋值函数
private:
char *m_data; // 用于保存字符串 };
第0章 C++基础知识 0.7 类与对象---构造函数String::String(const char *str)
{
NULL)
==
if(str
{
char[1];
new
=
m_data
‘\0’;
*m_data
=
}
else
{
int length = strlen(str);
new
char[length+1];
=
m_data
str);
strcpy(m_data,
}
}
第0章 C++基础知识
0.7 类与对象---析构函数
String::~String(void)
{
if(m_data != NULL)
{
// m_data是内部数据类型,也可写成 delete m_data;
delete [] m_data;
m_data = NULL;
}
}
第0章 C++基础知识
0.7 类与对象
如果不主动编写拷贝构造函数和赋值函数,编译器将以“位拷贝”的方式自动生成缺省的函数。
倘若类中含有指针变量,那么这两个缺省的函数就隐含了错误。
第0章 C++基础知识
0.7 类与对象
String a(“hello”),b(“world”);;
b=a;
上面的赋值操作将造成三个错误:
(1) b.m_data原有存没被释放,造成内存泄露;
(2) b.m_data和a.m_data指向同一块内存,a 或b任何一方变动都会影响另一方;
(3) 在对象被析构时,m_data被释放了两次。
第0章 C++基础知识
0.7 类与对象---拷贝构造函数
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);
}
第0章 C++基础知识
0.7 类与对象---赋值函数
String & String::operate =(const String &other) {
// (1) 检查自赋值
if(this == &other)
{
return *this;
}
// (2) 释放原有的内存资源
delete [] m_data;
第0章 C++基础知识
0.7 类与对象---赋值函数
// 。
接上页
// (3)分配新的内存资源,并复制内容 int length = strlen(other.m_data);
m_data = new char[length+1];
strcpy(m_data, other.m_data);
// (4)返回本对象的引用
return *this;
}
第0章 C++基础知识
0.8 Visual C++ 6.0编程环境
(1) 工程类型
1、Win32 Console Application
2、Win32 Application
3、MFC AppWizard(exe) (2) 工作区窗口
1、类视图
2、资源视图
3、文件视图
第0章 C++基础知识 0.8 Visual C++ 6.0编程环境(3) 文件管理
1、建立文件
2、添加文件到项目
3、从项目删除文件
(4) 程序调试
F5 执行到断点处
F9 设置/清除断点
F10 单步执行程序
F11 进入函数体内部
第0章 C++基础知识
作业:
设计向量类,实现构造函数、拷贝构造函数、赋值函数、析构函数。
Class CVector
{
public:
CVector(const double *data=NULL, int length=0);
CVector(const CVector&other);
CVector& operate = (const CVector&other);
~CVector(void);
private:
double *m_data;
int m_length;
};。