一、什么是对象?
客观世界中任何一个事物都可以看成一个对象,一个对象有两个属性:一是静态特征—属性,一是动态特征—行为或功能。在一个系统中的对个对象之间一定通过一定的渠道相互联系,要使某个对象实现一种行为,应向它传送相应的消息。在C++中,每个对象都是由数据和函数这两部分组成,数据体现了属性,函数是对数据进行操作,以便实现某些功能的。
行为或功能在程序设计中也成为方法。
二、面向对象程序设计的特点
面向对象有4个特点:抽象、封装、多态、继承
抽象:抓住事物的本质,而不是内部具体的细节或者具体的实现,可提高代码的灵活性
封装:按照信息屏蔽的原则,把对象的属性和操作结合在一起,构成一个独立的对象。通过限制对属性和操作的访问权限,可以将属性隐藏在对象的内部,对外提供一定的接口,在对象之外只能通过接口对对象进行操作。可提高代码的维护性。
多态:同一个消息被不同的对象接收时,产生不同结果,即实现同一个接口,不同方法。可提高代码的可扩展性。
继承:表达了对象的一般与特殊的关系,特殊类的对象具有一般类全部的属性和服务。提高了代码的复用性。
三、什么是类?
类是C++中十分重要的概念,它是实现面向对象程序设计的基础。类是所有面向对象的语言的共同特征。
对象的类型称为类,类代表了某一批对象的共性和特征,类是对象的抽象,而对象是类的具体实例。
四:类的声明
在关键词Public后面的声明,她们是类与外部的接口,任何外部函数都可以访问共有类型数据和函数。
在关键词private后面的声明,只允许本类中的函数访问,而类外部的任何函数都不能访问。
在关键词protected后面的声明,与private类似,其差别表现在继承与派生时对派生类的影响不同。
五、成员函数
一般的做法是将需要被外界调用的成员函数指定为public,它们是类的外界接口,但并不是把所有的成员函数都指定为public,有的函数并不是为外界调用的,而是为本类中的成员函数所调用的,就将他们指定为private,这种函数的作用是支持其他函数的操作,是类中其他成员的工具函数,用户不能调用这些私有的工具函数。
a.定义对象的方法:
1、先声明类型,再定义对象
1)、class 类名 对象名 如:class Student stud1;
2)、类名 对象名 如Student stud1
2、在声明类型的同时定义对象
Class Student
{
Public:......;
Private:......;
Protected:......;
}stud1;
3、不出现类名,直接定义对象:
Class
{
Public:......;
Private:......;
Protected:......;
}stud1;
b.类内实现成员函数:
类内实现成员函数一般用inline函数。
类中定义的成员函数的规模一般都很小,而系统调用函数的过程所花的时间开销是相对比较大的。调用一个函数的时间开销远远大于小规模函数体中全部语句的执行时间。为了减少时间开销,把函数的代码嵌入程序的调用点,即使用了inline函数。
如:
Class Student
{
Public:
Inline void display()
{
cout<<”num”<<num<<endl;
cout<<”name”<<name<<endl;
cout<<”sex”<<sex<<endl;
}
Private:
Int num;
Char name;
Char sex;
};
C.类外实现成员函数
Class Student
{
Public:
void display();
Private:
Int num;
Char name;
Char sex;
};
Void Student::display//成员函数在类外定义时,必须要加上类名,“::”是作用域运算符
//用来限定函数的哪一类的
{
cout<<”num”<<num<<endl;
cout<<”name”<<name<<endl;
cout<<”sex”<<sex<<endl;
}
Student stu1;
六、对象成员的引用
Class Student
{
Public:
void display();
Private:
Int num;
Char name;
Char sex;
};
Student t;
1、通过对象名和成员运算符访问对象中的成员
对象名.成员名
看上面的例子,引用display为t.display();
2、通过对象的指针访问对象中的成员
对象名->成员名
Class Student
{
Public:
Int hour;
Int minute;
Private:
Int num;
Char name;
Char sex;
};
Student t,*p;
P = &t;//使p指向t;
P->hour;
3.通过对象的引用来访问对象的成员
Student t;
Student &t1 = t;
t1.hour//访问t中的成员hour
*class与stuct的区别:class成员默认私有,struct成员默认公有
调用类中的函数时,会自动传this指针,this指针调用的是对象的地址,
七、前向声明
例子:
前向声明有点像头文件,不能定义B的对象,只定义B的指针或引用(须初始化)。