欢迎光临散文网 会员登陆 & 注册

二、类与对象

2022-11-04 18:13 作者:爱玩UE5的小哥哥  | 我要投稿

一.类的定义

为了以后的笔记方便就把.h文件与.cpp文件合并。

1.访问权限:能不能访问该类中的成员

①Public

②Protected 

③Private

声明:

在类的内部(定义类的代码内部),无论成员被声明为 public、protected 还是 private,都是可以互相访问的,没有访问权限的限制。

在类的外部(定义类的代码之外),只能通过对象访问成员,并且通过对象只能访问 public 属性的成员,不能访问 private、protected 属性的成员。

2.成员变量(属性)

3.成员函数(方法)

①构造函数

构造函数的调用是强制性的,一旦在类中定义了构造函数,那么创建对象时就一定要调用,不调用是错误的。如果有多个重载的构造函数,那么创建对象时提供的实参必须和其中的一个构造函数匹配;反过来说,创建对象时只有一个构造函数会被调用。

作用:对成员变量进行初始化

a.默认构造函数

程序中自己不定义构造函数,那必然有一个默认的构造函数将对成员变量进行初始化

b.程序员定义的构造函数(无参、有参)

验证了创建对象时调用构造函数

c.构造函数的重载:在创建对象时根据传递的实参来判断调用哪一个构造函数。

②普通成员函数

二.对象的创建及访问类中的成员

创建对象时就一定要调用构造函数,不调用是错误的。

1.普通对象

格式:类 对象名;

例:Date a;

2.指针对象

①在栈上创建对象

创建的对象在栈上分配内存,需要使用&获取它的地址

类 对象名;

类 *指针名 = &对象;

例:Date a;

       Date *p = &a;

②在堆上创建动态对象

使用 new 在堆上创建出来的对象是匿名的,没法直接使用,必须要用一个指针指向它,再借助指针来访问它的成员变量或成员函数。

类 *指针名 = new 类;

Date *p = new Date;

3.对象数组

用构造函数对象数组中的每个元素进行初始化。具体哪些元素用哪些构造函数初始化,取决于定义数组时的写法;(也可以这么理解:对象数组的初始化通常也是由构造函数来完成的)

① 类 对象数组名[数组元素个数];

例:Date a[2] = {Date(),Date()};

与普通数组的表现形式一致(int a[2] = {1,8})

②Date *p[3] = {new Date(),new Date(1),new Date(55,88)}

指针数组分别指向三个new出来的对象

4.对象引用

类 对象名;

类 & 引用名 = 对象;

例:Date a;

       Date & r = a;

三.类成员的修饰符

1.const修饰符

①const修饰类的成员变量

不能在类里直接初始化const成员变量,const成员变量属于某个对象,不同对象const数据成员的值可能不同

const修饰类成员变量只能在类的构造函数的初始化列表中进行初始化

②const修饰类的成员函数

const 成员函数可以使用类中的所有成员变量,但是不能修改它们的值,这种措施主要还是为了保护数据而设置的。

③const修饰对象

const 可以用来修饰对象,称为常对象。一旦将对象定义为常对象之后,就只能调用类的 const 成员(包括 const 成员变量和 const 成员函数)了。

语法

定义常对象的语法和定义常量的语法类似:const  class  object(params);

可以定义 const 指针:const class *p = new class(params);

class为类名,object为对象名,params为实参列表,p为指针名。两种方式定义出来的对象都是常对象。

2.static修饰符

static可以修饰类中的成员变量(属性)与成员函数(方法);可以实现同一类对象之间的数据共享,static修饰过的成员属于类,不属于某个具体的对象。

①static修饰成员变量(统计案例典型)

声明   static 变量名  例:static int count;

初始化  必须在类体外部

  对象的类::变量名 = xxx;  例: int student::count = 10;

②static修饰成员函数

在C++中,静态成员函数的主要目的是访问静态成员。getTotal()、getPoints() 当然也可以声明为普通成员函数,但是它们都只对静态成员进行操作,加上 static 语义更加明确。

四.对象成员

一个类的对象是另一个类的成员变量;

类名::构造函数名(参数表): 成员变量1(参数表), 成员变量2(参数表), ...
{
    //TODO:
}

对于基本类型的成员变量,“参数表”中只有一个值,就是初始值,在调用构造函数时,会把这个初始值直接赋给成员变量。
但是对于成员对象,“参数表”中存放的是构造函数的参数,它可能是一个值,也可能是多个值,它指明了该成员对象如何被初始化。


二、类与对象的评论 (共 条)

分享到微博请遵守国家法律