面向对象程序设计的核心任务是:
类的确定和对象的创建
- 好处:
- 写程序不再是从计算机的角度考虑问题了,而是站在 人类思维的角度
- 程序的可扩展性要比其他不是面向对象的程序设计语言好。
- 能最大限度保护已有程序代码。
面向对象的方法
-
目的:
实现软件设计的产业化 -
观点
自然界是由实体(对象)所组成。
一、类
- 类的组成
数据成员&成员函数
- 类的声明
class 类名称
{ public:
公有成员(外部接口)
private: 私有成员
protected: 保护型成员
} ;
数据成员:
类的任何成员都必须指定访问属性。
将数据成员定义为私有成员或保护成员
将成员函数定义为公有成员。
private:只能由
1.该类中的函数、
2.其友元函数访问。
不能被任何其他访问,该类的对象也不能访问。
protected:可以被
1.该类中的函数、
2.派生类的函数
3.其友元函数访问。
但不能被该类的对象访问。
public:可以被
1.该类中的函数、
2.派生类的函数、
3.其友元函数访问,
4.该类的对象访问。
class Clock
{
public:
void SetTime(int NewH, int NewM, int NewS);
void ShowTime();//成员函数
private:
int Hour, Minute, Second;//成员数据
};
- 如果紧跟在类名称的后面声明私有成员,则关键字private可以省略:
class Clock
{ int Hour,Minute,Second;
public:
void SetTime(int NewH, int NewM, int NewS);
void ShowTime();
};
一般的,数据成员定义为私有成员或保护成员, 成员函数定义为公有成员。
- 类中的数据成员可以是C++语法规定的任意数据类型,但
不能用存储类型auto、register或extern进行修饰。 - 类的成员可以是其他类的对象,但不能以类自身的对象作
为本类的成员。 - 类定义必须以分号“;”结束
- class与struct的不同:
①class中,成员缺省情况是private。
②struct中,成员缺省情况是public。
成员函数
1、成员函数在类外定义的一般形式是:
返回类型 类名∷成员函数名(参数表)
{
// 函数体
}
也可以直接在类内给出函数体,形成内联成员函数。
允许声明重载函数和带默认形参值的函数
class Clock
{
public:
void SetTime(int NewH, int NewM, int NewS);
void ShowTime();
private:
int Hour, Minute, Second;
};
void Clock::SetTime(int NewH, int NewM,int NewS)//SetTime函数类外定义
{
Hour=NewH;
Minute=NewM;
Second=NewS;
}
二、对象
1、声明形式:
类名 对象名;
clock myclock
- (1)在声明类的同时,直接定义对象,即在声明类的右花括号“}”后,直接写出属于该类的对象名表。
- 例如:
class Coord {
public:
void setCoord(int,int);
int getx();
int gety();
private:
int x,y; }op1,op2;
- (2)声明了类之后,在使用时再定义对象,定义的格式与一般变量的定义格式相同,
- 例如:
class Coord { //… }; // … main() { Coord op1,op2; // … }
2、访问方式:
-
类中成员互访
直接使用成员名 -
类外访问
使用“对象名.成员名”的方式访问public属性的成员
3、对象成员的引用:
- 通过对象名和成员运算符访问对象成员
一般形式: 对象名.成员名
例如:
stud1.num=100;
stud1.display();
在类外只能访问public成员,不能访问private成员。
- 通过指向对象的指针访问对象中成员
一般形式:指针名->成员名
如:
student stud1,*p;
p=&stud1;
cout<<p->num;
p->num, (*p).num, stud1.num三者等价.
- 通过对象的引用访问对象中成员
如:
student stud1;
student &stud2=stud1;
cout<<stud2.num;