c++类和对象之对象指针

一、指向对象的指针

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

二、指向对象成员的指针

对象有地址,存放对象的起始地址的指针变量就是指向对象的指针变量
对象中的成员也有地址,存放对象成员的起始地址的指针变量就是指向对象成员的指针变量
1.定义指向对象数据成员的指针变量的一般形式
数据类型名 * 指针变量名

int *p;
p=&t.hour;

2.定义指向对象成员函数的指针变量的一般形式
注意定义指向对象成员函数的指针变量的方法与定义指向普通成员函数的指针变量的方法不一样
指向普通函数的指针的定义方法
类型名 ( 指针变量名)(参数表列)*

void (*p);
p=fun();
(*p)();

指向公用成员函数的指针的定义方法
类型名 (类名:: 指针变量名)(参数表列)*

void (Time::*p)();
p=&Time::gettime();
(t.(*p))();

三、this指针

每一个成员函数都包含了有一个特殊的指针,这个指针的名字是固定的,称为this。她是指向本类对象的指针,它的值是当前被调用的成员函数所在的对象的起始地址。
this指针是隐式使用的,它是作为参数被传递给的成员函数的。
需要说明:这些都是编译系统自动实现的,编程人员不必人为第在形参中增加this指针,也不必将对象的地址传递给this指针。
this指针的用途:
1.当形参和成员变量同名时,可以用this指针来区分
2.在类的非静态成员函数中返回对象本身,可以使用return *this

四、空指针访问成员函数

参考如下代码

#include 
using namespace std;
class person
{
public:
	void showperson()
	{
		cout << "this is person calss" << endl;
	}
	void showage()
	{
		if (this == NULL)
		{
			return;
		}
		cout << this->age << endl;
	}
	int age;
};
void test01()
{
	person* p = NULL;
	p->showperson();
	p->showage();//程序会出错,出错原因是this为空
}
int main()
{
	test01();
	return 0;
}

你可能感兴趣的:(c++,对象指针)