目录
2.1 面向对象概述
对象:客观世界中任何事物可看成一个对象
属性:对象的静态特征; 行为:动态特征 ; 消息:外界向内部传递信息。
一个对象往往是由一组属性和行为构成。
类是对象的抽象,而对象则是类的特例,是类的具体表现形式。
C++中,每个对象由数据和函数(操作代码)两部分组成、
“封装性”:指两方面的含义:一是将有关的数据和操作代码封装在一个对象中,形成一个基本的单位,各个对象之间相互独立,互不干扰。二是将对象某些部分对外隐蔽,只留下少数接口,与外界联系,接受外界信息。
2.2 类的声明和对象的定义
在类的定义时,未指定成员访问限定符,系统会将全部成员默认为private(私有的)。
protected访问限定符,不能被类外访问,但可以被派生类的成员函数访问。
2.3 类的成员函数
class Time
{public:
int hour:
int minute;
};
Time t,*p;
p=&t;
cout << p->hour;
cout << (*p).hour
cout << t.hour
3 关于类和对象的进一步讨论
3.1构造函数
3.1.4 用参数初始化表对数据成员初始化
Box::Box(int h,int w,int len):height(h),width(w),length(len){}
分别用形参 h , w , len 对数据成员初始化赋值
3.1.5 构造函数的重载
一个类可定义多个构造函数,以便对类不同的初始化方式,这些构造函数有相同的名字,而参数的个数或参数的类型不相同。对于每个对象,建立对象只执行其中一个构造函数。
3.1.6 使用默认参数的构造函数
例3.3 建立立方体对象,输入长宽高后计算他的体积。
#include <iostream>
using namespace std;
class Box
{
public:
Box(int h=10,int w=10,int len=10);
int volume();
private:
int height;
int width;
int length;
};
Box::Box(int h, int w, int len) :height(h),width(w),length(len){} //参数初始化列表赋值
int Box::volume()
{
return height*width*length;
}
int main()
{
Box b1;
cout << "The volume of box1 is " << b1.volume() << endl;
Box b2(20);
cout << "The volume of box2 is " << b2.volume() << endl;
Box b3(20,30);
cout << "The volume of box3 is " << b3.volume() << endl;
Box b4(40, 30,10);
cout << "The volume of box4 is " << b4.volume() << endl;
}
3.2 析构函数
在一个函数中定义一个对象,当这个函数调用结束时,自动调用析构函数。
全局对象、static局部对象在main函数结束或调用main函数。
“先构造的后析构,后构造的先析构”
3.4 对象数组
在定义对象数组时,采用依次写出构造函数的方式赋值。
Student Stud[3]={
Student (1001,18,87),
Student (1002,18,89),
Student (1003,19,85),
};
3.5 对象指针
指向普通函数的指针变量的定义方法: 数据类型名 (* 指针变量名)(参数表列)
void (*p) () ; //p是指向void型函数的指针变量
p=fun; //将fun函数的入口地址赋给指针变量p,p就指向了函数fun
(*p)(); //调用fun函数
指向对象公用成员函数的指针变量的定义: 数据类型名 (类名 : : * 指针变量名)(参数列表)
使指针变量指向一个公用成员函数的一般形式: 指针变量名 =& 类名 :: 成员函数名
例3. 7 有关对象指针的使用方法
#include <iostream>
using namespace std;
class Time{
……
}
int main(){
Time t1 (10,13,56)
int *p1=&t1.hour; //定义指向整型数据的指针变量
t1.get_time();
Time *p2 = &t1; //定义指向Time类对象的指针变量p2
p2->get_time();
void (Time:: *p3)(); //定义指向Time类公用成员函数的指针变量p3
p3=&Time::get_time; //使p3指向具体的成员函数
(t1.*p3)(); //调用t1中p3所指向的成员函数(即 t1.get_time())
}
3.9 静态成员
3.9.1 静态数据成员
类的静态数据成员,为所有实例的类对象所有,只占一份空间,在程序结束时才释放。
只能在类体外进行初始化。
通过对象和类名均可调用静态数据成员。