第九章_对象和类

第九章 对象和类

1.声明类
类定义了对象的属性和行为。
相同类型的对象用一个通用的类来定义。
一个对象是类的一个实例(instantiation)。
构造函数(constructor)在创建新对象时被调用。
UML类图:Unified mondeling Language(统一建模语言)。
类定义末尾需要一个分号";"
作为一个类成员,数据域不能在声明时进行初始化。
2.创建和使用对象
对象的数据域和函数可用对象名通过点运算符(.)来访问。
使用无参构造函数创建(命名)对象的语法:
ClassName objectName; //注意此处不能有括号。
有参构造函数创建(命名)对象的语法:
ClassName objectName(arguments);
使用无参构造函数创建匿名对象的语法:
ClassName()e; //注意此处必须有括号。
有参构造函数创建匿名对象的语法:
ClassName(arguments);
实例变量又称实例成员变量,如Circle类中的radius;实例函数又称实例成员函数,如Circle类中的getArea()。
一个类就是一个数据类型。
可以使用赋值运算符=来进行对象间内容的复制。例如:
Circle c1;
Circle c2(1.0);
c1 = c2;//此时c1和c2是拥有半径相同的两个不同的对象
一个对象往往不像我们想的那样大,它虽然有相应的数据域,也可以调用函数,但其大小只与数据域有关,可以通过函数sizeof(objectName)来查看。
3.类定义和类实现的分离
分离类的定义和类的实现有助于类的维护。
类定义文件的扩展名为.h;类实现文件的扩展名为.cpp。
程序9-1和程序9-2分别给出了类Circle的定义和实现。
程序清单9-1 Circle.h

class Circle  
{  
public:  
Circle();  
Circle(double newRadius);  
double getArea();   
private:  

double radius;  
};   

程序清单9-2 Circle.h

\#include "Circle.h"  
Circle::Circle()  
{  
  radius = 1;  
}  
Circle::Circle(double)  
{  
  radius = newRadius;  
}  
double Circle::getArea()  
{  
  return radius*radius*3.14;  
}  
//每个构造函数与函数之前的Cirle::告知编译器这些函数是定义于Circle类中的。  

4.避免多次包含

“包含保护”(inclusion guard)可避免头文件被多次包含。
原因:在C++中,预处理器是把头文件的内容插入他们被包含的位置。
方法:

\#ifndef ClassName_H    
\#define ClassName_H  
A class header for the class named ClassName  
\#endif  

5.类中的内联函数
6.数据域封装
使用private关键字,将数据域声明为私有的。
7.变量作用域
无论实例变量和静态变量在类的何处声明,他的作用域都是整个类。
虽然类成员可以按照任意顺序声明,但提倡先声明共有成员。
如果成员函数中一个局部变量于一个数据域具有相同的名字,数据域将会被屏蔽,因为局部变量在其所定义的函数中的优先级更高。
8.类抽象和类封装
类抽象:将类的实现和使用分开;
类封装:将类的实现细节封装起来,对用户隐蔽。
建议:在本课程之后的学习中,可以先创建一个类对象,并尝试使用它的函数,再把注意力放到类的实现上。

创建一个类对象,并尝试使用它的函数,再把注意力放到类的实现上。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

不褈名好难

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值