C (DAY09)C 实务精选罕见资源大集合

  • 格式:pdf
  • 大小:73.40 KB
  • 文档页数:3

C++笔记2007年4月3日
1、类型封装
类-->对象
描述:(1)属性
(2)行为---属性和行为是属于类的
创建对象。

2、构造函数---初始化对象
(1)构造函数名字必须与类名一样
(2)构造函数不能写返回类型

构造函数在创建对象时,系统自动调用
构造函数允许重载,按用户要求,适应多种情况
当类中一个构造函数都没有的时候,系统提供默认无参的构造函数
但如果在类中定义了一个构造函数,系统就不提供默认的了,所以,建议,在写构造函数
时,都要写一个无参的构造函数

3、对类的安全的定义
变量->私有->private保护变量,防止外界随意修改,只能在类的内部使用(只能
被自己的成员函数使用)
函数->公有->public

为保证私有变量也能为外界访问,在类内部提供set,get方法
set方法没有返回值,但要求有参数
get方法肯定有返回值,没有参数

4、定义类的步骤
(1)写属性的行为
成员变量函数
(2)成员变量-->private
成员函数-->public
(3)特殊函数
构造函数,建议写2个。一个有参数的,一个无参的
get,set函数,一个成员变量对应一对get,set函数,是外界访问此变量的唯一途径
对于setXXX函数,没有返回值,有参数,参数的类型与被赋值的属性类型一致。
对于getXXX函数,没有参数,有返回值,返回值的类型与输出的属性类型一致。
类的行为

5、封装
定义类的过程就是封装

练习:封装一个account类型
属性:id,password,name,balance
行为:save,withdraw,query

6、把account类拆成多文件结构
(1)方便快速浏览整个类定义
(2)使用方便,包含头文件即可

longAccount::getId(){...........}
在函数实现时,函数前把类名加上,确定函数的所有权,避免2个类中有同名的函数,编
译出错。
"::"称为域访问控制符。

7、Personper;创建了一个对象,系统调用构造函数。
Person*p=NULL;声明一个类的指针,系统是不会调用构造函数的

Person*p=NULL;
p=newPerson;在堆中申请一个类空间
deletep;
在堆中的数据没有名字,只能通过指针访问类对象,访问类的成员变量:
(*p).sayHello();
p->sayHello();

Personps[5];声明一个Person类型的数组,会调用5次构造函数
数组在声明的时候,系统会为其分配空间
并且在声明数组的时候,没有机会指定构造函数,只会调用无参的构造函

当一个类定义中没有无参的构造函数,但要声明一个类的数组时,可以声明一个指针数组
Person*ps[5];---声明指针的时候,类对象没有创建,数组中每个元素都是Person
类型的指针,达到:
(1)不用构造函数
(2)实现使用对象

for(inti=0;i<5;i++){
ps[i]=newPerson(i,20+i);//用循环初始化每个指针
}
for(inti=0;i<5;i++){
deleteps[i];//释放指针指向的空间
ps[i]=NULL;
}

8、课堂练习:
要求:main()函数中不能写代码,在运行程序时,打印“HelloWorld”
答案:全局变量的初始化操作在main函数执行之前就已经初始化了。因此,可以写一个
全局变量的类,其无参构造函数写输出语句。
然后声明一个类的全局对象。

9、在构造函数中,当成员变量名称和形参名称相同,避免冲突的方法:
在每个对象内部都有一个名为this的指针,指向自己,使用自己的成员变量this->name

10、析构函数
当对象的生命周期结束,系统要回收空间,会自动被调用
申请的所有资源(newchar[20]),在析构函数中释放
若对象是在main函数中的变量,在main函数结束之后,才会调用析构函数
若对象是一个函数中的局部变量,在函数返回时,调用析构函数

析构函数调用:对象生命周期结束,系统自动调用析构函数
可以把释放资源的代码写在析构函数中

析构函数的写法:构造函数前加“~”
不能重载,不能有参数

若不写析构函数,系统会提供默认的析构函数
当类中用到了系统空间:new内存,打开文件
就需要写析构函数,释放资源

11、作业:(1)利用面向对象的思想实现栈结构,并自己写main函数测试。
(2)把原来的银行系统改成面向对象的形式。