当前位置:文档之家› 第6章讲义类和对象

第6章讲义类和对象


与private类似,类的成员函数和友元类的成员函数可以访问
该类的派生类的成员也可以访问
▪ 类vs.结构:
类成员缺省为私有的!!
类和struct的每个方面都是一样的,只是class中的成员默认为私有的, 而struct中的成员默认为公有的。
类的封装性
▪ 数据成员可只在类内被处理,也可开放给外界,以数据封装的目的而言,
6.5 静 态 成 员 6.6 成 员 指 针(略) 6.7 t h i s 指 针
6.1 类
▪ 从语言的角度,类是一种数据类型
对象是具有这种类型的变量。类似于int n
▪ 类是一种用户自定义的数据类
复杂的数据类型
数据成员(属性、成员变量) 成员函数(服务、方法)
6.1.1 类的定义
每个类定义引入一个新的(类)类型
第6章类和对象
精品
目录
6.1 类 6.1.1 类的定义&数据成员 6.1.2 类的成员函数 6.1.3 访问权限
6.2 类 对 象 6.2.1对象的定义格式 6.2.2对象成员的表示方法
6.3 构造函数和析构函数 6.3.1 构造函数 6.3.2 析构函数
6.4 常 类 型
6.4.1常引用 6.4.2常对象 6.4.3常对象成员
Point *p=NULL; p=&aa; p=new Point;
void display();
//内联函数2-但成员函数定义在类体外
};
void Point:: move(int x1,int y1)
//成员函数定义在类体外,用::
{
x=x+x1;
y=y+y1;
}
inline void Point::display()
//内联函数
{
cout<<"x="<<x<<",y="<<y<<endl;
class <类名> {
//数据成员声明 private:
类头
protected:
public:
//成员函数声明 private:
protected:
public: };
类成员 函数列表
类体
类的数据成员
▪ 声明方式同普通变量的声明,可以是任意类型 ▪ 注!数据成员不能在类体中显式地初始化
class Point {
private:(私有的)
▪ 只允许类本身的成员函数和友元类的成员函数)对其访问 ▪ 其他任何函数都不能访问(包括其他类和派生类的成员函数) ▪ 即便是本类的对象也不能访问私有成员
public:(公有的):
类与外部的接口,任何外部函数都可访问公有成员变量和成员函数
也可以通过本类的对象来访问!
protected:(保护的)用于类的继承
};
▪ 成员函数的定义
(1)定义在类体内
▪ 在类定义体内实现的成员函数都是内联函数 ▪ 在类定义体外,通过声明和定义分别加上inline也是内联函数
(2)定义在类体外——使用域运算符::该函数是属于哪一个类的成员函数
<返回值类型> <类名>:: <成员函数名>(<形式参数表>){
//函数体
}
例:类的定义


X
Y

void move(int x1,int y1); //成员函数

move



void display();
//成员函数


dis:: move(int x1,int y1)
{ x=x+x1;y=y+y1;}
void Point::display()
{ cout << “x=“ << x << “,y=“ << y <<endl;}
// int x=0,y=0; 错误 int x, y; };
6.1.2 类的成员函数
▪ 成员函数的声明——在类体内
class Point{
int x,y;
// int x=0,y=0; 错误
void setPoint(int x,int y);
void move(int x1,int y1);
void display();
#include <iostream.h>
class Point
//定义类Point
{
int x,y;
//数据成员-私有
public:
void setPoint (int x1,int y1){x=x1;y=y1;} //成员函数定义在类体内-内联函数1
void move(int x1,int y1);
6.2 类对象
▪ 类只是一个数据类型。使用类必须说明类的对象。
数据类型 变量

对象
▪ 定义类时,系统是不会给类分配存储空间的。只有定义类对
象时会引起内存分配。
6.2.1对象的定义格式
▪ 定义对象:
<类名> <对象名表>;
myPoint1
Point myPoint1,myPoint2;
引起内存分配,每个对象有自己的类数据成员拷贝
x
一个对象可以被同一类型的另一个对象初始化或赋值。
y
myPoint2 = myPoint1;
缺省情况下,拷贝一个类对象与拷贝它的全部数据成员等价
▪ 对象数组的声明:
Point myptarray[3];
▪ 类对象的指针和引用的声明:
Point myPoint1,*myPoint2,*myPoint3; myPoint2=&myPoint1;
myPoint3=myPoint2;
myPoint2
x y
对象的创建方式
▪ 静态创建
Point aa;
▪ 动态创建
Point *bb=new Point;
Point *p;
只定义一个指针(指向Point类型对象的指针),但并没有真正创建对象
Point *p=new Point;
使用 new Point建立了一个临时对象,并使指针p指象该对象
自然是前者较为妥当,但有时也不得不开放。
include <iostream.h> class Point
类成员函数可直接 访问类的数据成员
{
private:
int x,y;
//数据成员
类Point

public:
外 setvalue

void setPoint (int x1,int y1){x=x1;y=y1;}
}
注意:
▪ 成员函数可以重载,但一个成员函数只能重
载自己类中的其它成员函数。
▪ 成员函数的参数可以有默认值。 ▪ 在类体中定义的成员函数都是内联函数。 ▪ 在类体外定义的成员函数缺省不是内联的,
也可通过在函数的声明和定义上分别加 inline表示该函数是内联的。
6.1.3 访问权限
▪ c++允许类的数据成员或成员函数有不同程度的可见性
相关主题