对象数组与对象指针

一、对象数组

将具有相同类类型的对象有序地集合在一起便构成了对象数组

一维对象数组定义形式:

类名 对象数组名[常量表达式];

如: student stu1[10];

对象数组使用说明:

1)在建立对象数组时,需要调用构造函数。如果对象数组有10个元素,就需要调用10次构造函数。

2)如果构造函数只有一个参数,在定义数组时可以直接在初值列表中提供实参
如:student stu1[3] = {67,75,89 };

3)如果构造函数有多个参数,则不能在定义数组时直接提供所有实参,应分别写出构造函数名并在括号内指定实参,分别调用构造函数,对每个元素初始化。

如:student stu1[3]={student(20060101,”张三”, 67),student(20060102,”李四,75),student(20060101,”王五”,75) };

二、对象指针

        C++的指针被分成数据指针函数指针数据成员指针成员函数指针四种,而且不能随便相互转换。其中前两种是C语言的,称为普通指针;后两种是C++专门为类扩展的,称为成员指针。成员指针与类的类型和成员的类型相关,它只应用于类的非静态成员。由于静态类成员不是任何对象的组成部分,所以静态成员指针可用普通指针。

1>指向对象的指针

        在建立对象时,编译系统会为每一个对象分配一定的存储空间,以存放其成员。对象内存单元的起始地址就是对象的指针。
可以定义一个指针变量,用来存放对象的地址,这就是指向对象的指针变量。
指向类对象的指针变量定义形式:

类名*对象指针变量名;

如: student stu;
      student *p = &stu;

可以通过对象指针访问对象和对象的成员。

如: student stu; 
     student *p = &stu;
     p -> num ;  或 (*p). num;
     p -> display(); 或 (*p). display( );

2>指向对象成员的指针

对象的成员要占用存储空间,因此也有地址,可以定义指向对象成员的指针变量。

1.指向对象数据成员的指针变量定义形式:
数据成员类型 *指针变量名;

如: student stu;
      int *p = &stu . num;
2.指向对象成员函数的指针

定义成员函数的指针时,必须确保与它所指函数的类型相匹配:
1)函数形参的类型和数目。

2)返回类型。

3)所属类的类型。
指向对象成员函数的指针变量定义形式:
数据类型(类名:*指针变量名)(参数列表);

如: void ( student :: *p)();
     p= &student :: display;

3>指向当前对象的this指针

当不同对象的成员函数引用数据成员时,怎么保证引用的是所指定的成员呢?
在每一个成员函数中都包含了一个特殊的指针,这个指针的名字是固定的,称为this指针,它是指向本类对象的指针,它的值是当前被调用的成员函数所在对象的起始地址。
this指针是一种隐含指针,隐含于每个类的成员函数中,即调用某成员函数时,都将自动产生一个this指针,它是作为参数被传递给成员函数的
 

#include<iostream>
using namespace std;

class Student
{
private:
	int num;
	string name;
	float score;
public:
	Student()
	{
		num = 2020;
		name = "zhangsan";
		score = 85;
	}
void Print()
{
	cout << "num:" << this->num << endl;
	cout << "name:" << (*this).name << endl;
	cout << "score:" << score << endl;
}
};
int main()
{
	Student stu1;
	stu1.Print();
	return 0;
}


 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值