C++死磕基础之指针篇(三)--对象指针的创建以及使用

在上一篇文章中已经介绍了C++对象指针的概念,本篇文章主要讲解对象指针的两种创建方式

C++对象指针简介:C++对象指针

一.定义对象的指针,对象指针指向类的实例化对象的地址

先来看一个示例:
Test1.h

#ifndef TEST1_H
#define TEST1_H
class Student{
public:
	Student(){}
	int getNum();
	int getScore();
	void print()const;
	int num;
	int score;
};


#endif

Test1.cpp

#include
#include
using namespace std;
#include"Test1.h"

int Student::getNum(){
	return num;
}
int Student::getScore(){
	return score;
}


void Student::print() const
{
	cout<<"学号:"<num=2;
	ptrstu->score=100;
	ptrstu->print();
	return 0;
}

结果:C++死磕基础之指针篇(三)--对象指针的创建以及使用_第1张图片

分析:
首先在h文件中定义了Student类以及声明了类的成员函数,在cpp中定义成员函数。
1.在main函数中创建了Student类的对象std1
2.定义对象指针ptrstu //Student* ptrstu=&std1;
3.对象指针指向类的对象的地址 //Student* ptrstu=&std1;
4.访问类的对象中的成员变量

这是第一种方式,通过定义对象指针指向类的实例化对象的地址

二.定义对象的指针,且指针对象是类的实例化,通过new关键字实现

将上面的例子修改main函数中的内容即可实现

int main(){
	Student* ptrstu=new Student;
	ptrstu->num=3;
	ptrstu->score=99;
	ptrstu->print();
	delete ptrstu;
	return 0;
}

结果:
C++死磕基础之指针篇(三)--对象指针的创建以及使用_第2张图片
分析:
此方法直接定义类的实例化的指针对象,且这个实例化的指针对象可以访问类的所有数据成员。

三.两种创建对象指针方式的区别

1.第一种创建指针对象是在上面分配内存,通过“&”可以获取地址,对象使用完后会自动回收

2.第二种创建对象指针是在上面创建并分配内存空间的,用完不会自动回收,需要手动使用delete关键字回收。

3.在栈上创建出来的对象都有一个名字,比如std1,使用指针并不一定要指向它。

4.在堆上分配内存,使用new创建出来的对象,没有名字,只能得到一个指向它的指针,所以必须使用一个指针变量来接收这个指针,否则以后再也无法找到这个对象,即,使用new在堆上创建的对象是匿名的,没法直接使用,必须要有一个指针指向它,再借助指针来访问它的成员函数或成员变量。

5.栈内存是程序自动管理,不能使用delete删除在栈上创建的对象,堆内存由程序员管理,对象使用完毕后可以通过delete删除,实际开发中,new和delete是成对出现的,保证及时删除不再使用的对象,防止无用内存堆积,我们一般可以在析构函数中使用delete删除对象指针。

四.实例演示—在一个类中通过另一个类的对象指针,访问另一个类的成员函数

通过以上的讲解,大家都能够理解了对象指针的作用,那么,现在实例演示开发中常见的方法–在一个类中,通过对象指针访问另一个类的成员变量

示例:
Test1.h

#ifndef TEST1_H
#define TEST1_H
#include "Test2.h"
class Student{
public:
	Student(){}
	Teacher* t;
	void getTeacher();
	~Student();
};


#endif

Test2.h

#ifndef TEST2_H
#define TEST2_H
class Teacher{
public:
	Teacher(){}
	int getStudentNum( int count);
	~Teacher();
};


#endif

Test2.cpp

#include
#include
using namespace std;
#include"Test2.h"
int Teacher::getStudentNum(int number){
	return number;
}
Teacher::~Teacher()
{
}

Test1.cpp

#include
#include
using namespace std;
//#include"Test2.h"
#include"Test1.h"

Student::~Student(){
	delete t;
}
void Student::getTeacher(){
	t=new Teacher;
	t->getStudentNum(50);
	cout<getStudentNum(50)<getTeacher();
	delete pstr;
	return 0;
}

结果:
C++死磕基础之指针篇(三)--对象指针的创建以及使用_第3张图片

要求:在Student类中通过getTeacher()方法访问Teacher类中的getStudentNum()方法。

首先一步步讲解:
1.在Test1.h中定义Student类,声明类中的方法以及变量的定义。//这里类中的方法为getTeacher()为了获取Teacher类中的方法所定义的函数,Teacher* t;为在Student类中声明Teacher类的指针。

2.在Test2.h中定义Teacher类,声明类中的方法为getStudentNum()。

3.在Test2.cpp中定义getStudentNum()方法为返回学生数量。

4.在Test1.cpp中定义getTeacher()方法,其中创建了Teacher类的对象指针t,通过new创建,t=new Teacher;

5.通过此对象指针可以获取Teacher类中的方法getStudentNum()。

6.在Test1.cpp中定义Student类的析构函数~Student(),为了在对象使用完后删除Teacher类的对象指针

7.创建Student的对象指针pstr,可以使用以上两种方法,如果使用new创建,最后要使用delete删除对象指针。

综上:此实例实现了在Student类中使用Teacher类的对象指针,访问Teacher类的成员函数。

本篇文章 对象指针的创建以及使用 就演示到这里。

你可能感兴趣的:(C++,c++,指针,类,面向对象编程)