C++中的对象指针
指向对象的指针
#include<iostream>
using namespace std;
class Student
{
public:
int num;
int score;
Student(int ,int );//声明构造函数
void Print();//声明输出信息函数
};
Student::Student(int n,int s)
{
num=n;
score=s;
}
void Student::Print(){
cout<<num<<"\t"<<score<<endl;
}
int main(){
Student stud(1,100);//实例化一个对象
Student *p=&stud;//定义一个指向对象的指针,并使用对象stud的地址初始化
cout<<"*p.num:"<<(*p).num<<endl;//使用指向对象的指针调用数据成员的方式一
cout<<"p->score:"<<p->score<<endl;//使用指向对象的指针调用数据成员的方式二
(*p).Print();
p->Print();
return 0;
}
指向对象成员的指针
指向对象的指针变量。
指向对象成员的指针变量。
1.指向对象数据成员的指针
p=&t1.hour;//将对象t1的数据成员hour的地址赋给p,p指向t1.hour
cout<<*p<<endl;//输出t1.hour的值
2.指向对象成员函数的指针
void (*p)(int n,int m);//p是指向void型函数的指针变量
p=fun;//将fun函数的入口地址赋给指针变量p,p就指向了函数fun
(*p)(a,b);//调用fun函数,其中,a,b是实参
而定义一个指向对象成员函数的指针变量则比较复杂一些。
void (*p)();
p=t1.Print();
编译会出现错误
成员函数与普通函数的一个最根本区别:它是类中的一个成员。
定义指向成员函数的指针变量应该采用以下形式:
void (Student::*p)();//定义p为指向Student类中公共成员函数的指针变量
数据类型名(类名::*指针变量名)(参数表列);
指针变量指向一个公用成员函数的一般形式为:
p=&Student::Print;
stud.(*p);//作用与stud.Print()的作用等价
#include<iostream>
using namespace std;
class Student
{
public:
int num;
int score;
Student(int ,int );
void Print();
};
Student::Student(int n,int s)
{
num=n;
score=s;
}
void Student::Print(){
cout<<num<<"\t"<<score<<endl;
}
int main(){
Student stud(1,100);
cout<<"stud.Print()"<<endl;
stud.Print();//直接调用对象stud的成员函数Print();
Student *p_class=&stud;//定义指向对象stud的指针;
cout<<"p_class->Print()"<<endl;
p_class->Print();//通过指向对象的指针调用成员函数Print();
void (Student::*p_fun)();//声明p_fun是指向Student中的函数的指针
p_fun=&Student::Print;//是p_fun指向Student类公用成员函数Print()
cout<<"(stud.*p_fun)()"<<endl;
(stud.*p_fun)();//调用对象stud中的p_fun所指向的成员函数(即:stud.Print)
return 0;
}
this指针
cout<<num<<"\t"<<score<<endl;
实际上是
cout<<this->num<<"\t"<<this->score<<endl;
this指针式隐式使用的,它是作为参数被传递给成员函数。
void Student::Print(){
cout<<num<<"\t"<<score<<endl;
}
C++编译系统会自动处理成:
void Student::Print(Student *this){
cout<<this->num<<"\t"<<this->score<<endl;
}
即在成员函数的形参表列中增加一个this指针。在调用成员函数stud.Print()时,实际上是用以下方式调用的:
stud.Print(&stud);
C++中的对象指针的更多相关文章
- C++中的智能指针、轻量级指针、强弱指针学习笔记
一.智能指针学习总结 1.一个非const引用无法指向一个临时变量,但是const引用是可以的! 2.C++中的delete和C中的free()类似,delete NULL不会报"doubl ...
- C++中的函数指针和函数对象总结
篇一.函数指针函数指针:是指向函数的指针变量,在C编译时,每一个函数都有一个入口地址,那么这个指向这个函数的函数指针便指向这个地址.函数指针的用途是很大的,主要有两个作用:用作调用函数和做函数的参数. ...
- vue中computed计算属性与methods对象中的this指针
this 指针问题 methods与computed中的this指针 应该指向的是它们自己,可是为什么this指针却可以访问data对象中的成员呢? 因为new Vue对象实例化后data中的成员和c ...
- C# CLR via 对象内存中堆的存储【类型对象指针、同步块索引】
最近在看书,看到了对象在内存中的存储方式. 讲到了对象存储在内存堆中,分配的空间除了类型对象的成员所需的内存量,还有额外的成员(类型对象指针. 同步块索引 ),看到这个我就有点不懂了,不知道类型对象指 ...
- 【转】vector中对象指针的排序
原文:http://blog.csdn.net/tanlijun37/article/details/1948493 vector中对象指针的排序,初步想法是1: 把对象指针存到vector,重载bo ...
- java 对象变量 c++对象指针 初始化对象变量的2中方法
java 对象变量 c++对象指针 java null引用 c++ null指针 Date deadline 是 对象变量,它可以引用Date类型的对象,但它不是一个对象,实际上它也没有引用对象. ...
- 获得函数返回值类型、参数tuple、成员函数指针中的对象类型
//function_traits.h,获得函数返回值类型.参数tuple.成员函数指针中的对象类型 //参考https://github.com/qicosmos/cosmos/blob/maste ...
- 浅谈Java中的对象和引用
浅谈Java中的对象和对象引用 在Java中,有一组名词经常一起出现,它们就是“对象和对象引用”,很多朋友在初学Java的时候可能经常会混淆这2个概念,觉得它们是一回事,事实上则不然.今天我们就来一起 ...
- QT中使用函数指针
想仿命令行,所以定义了一个类,让一个String 对应一个 function,将两者输入list容器. 类中定义了 QString commandStr; void (MainWindow::*com ...
随机推荐
- libgdx, mouse 关节
鼠标与body的交互就靠这个mouse 关节了. 在使用中:主要分成3步: 步1:mouseDown : 这个时期,调用world->QueryAABB.它有一个回调接口,并依据鼠标指针指定一个 ...
- TOMCAT的域名配置
链接地址:http://blog.163.com/skk1987@126/blog/static/29303413201051383548377/ 现在很多的公司的网站都是用tomcat作为应用服务区 ...
- CentOS6.5 配置防火墙+允许指定ip访问端口
参考博文: iptables防火墙只允许指定ip连接指定端口.访问指定网站 一.配置防火墙 打开配置文件 [root@localhost ~]# vi /etc/sysconfig/iptables ...
- Jsp的include指令静态导入和动态导入的区别
1.什么是静态导入? 静态导入指的是,将一个外部文件嵌入到当前JSP文件中,同时解析这个页面的JSP语句,它会把目标页面的其他编译指令也包含进来. include的静态导入指令使用语法: <%@ ...
- m2eclipse简单使用,创建Maven项目 ,运行mvn命令(转)
前面介绍了如何安装m2eclipse,现在,我们使用m2ecilpse导入Hello World项目. 选择菜单项File,然后选择Import,我们会看到一个Import对话框,在该对话框中选择Ge ...
- 转:git windows中文 乱码问题解决汇总
it的Windows版本Msysgit对中文的支持不够好 .当使用时,会出现以下三种情况的中文乱码: 下面的几个文件都在git安装目录下文件夹etc内.1.ls不能显示中文目录 解决办法:在git/g ...
- Android TextView自己主动换行文字排版參差不齐的原因
今天项目没什么进展,公司后台出问题了.看了下刚刚学习Android时的笔记,发现TextView会自己主动换行,并且排版文字參差不齐.查了下资料,总结原因例如以下: 1.半角字符与全角字符混乱所致:这 ...
- TortoiseSVN 文件关联图标不显示的解决方法
对于SVN来说,因为每个图标都代表着不同的含义,预示着不同的状态,是指示灯的作用,如果没有正确的图标很可能造成数据的丢失等 之前看了网上其他人写的帖子,,有一些是直接删除注册表下“ShellIconO ...
- EF 简单的 CRUD、分页 代码笔记
添加: static void Main(string[] args) { CCDBEntities ccdbContext = new CCDBEntities( ...
- 前端面试题整理(js)
1.HTTP协议的状态消息都有哪些? HTTP状态码是什么: Web服务器用来告诉客户端,发生了什么事. 状态码分类: 1**:信息提示.请求收到,继续处理2**:成功.操作成功收到,分析.接受3** ...