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 ...
随机推荐
- Java设计模式菜鸟系列(九)外观模式建模与实现
转载请注明出处:http://blog.csdn.net/lhy_ycu/article/details/39805735 外观模式(Facade):是为了解决类与类之间的依赖关系的,像spring一 ...
- VS2013配置opencv3.0.0 (win8.1)
今天下载了最新版本的opencv3.0.0,之前一直是opencv2.4.8 点击.exe文件,我将解压后的文件夹放在D:\盘,取名opencv30,D:\opencv30 添加环境变量:D:\ope ...
- 2015.7.17( NOI2015 day1 )
今天早起做了NOI2015网络同步赛.... 最近NOI是越来越向NOIP靠拢了....但是我还是不会做..... 第一题:程序自动分析 先离散化一下..然后最多就剩20w个数 , 不等于就存起来.. ...
- Python 第六篇(上):面向对象编程初级篇
面向:过程.函数.对象: 面向过程:根据业务逻辑从上到下写垒代码! 面向过程的编程弊:每次调用的时候都的重写,代码特别长,代码重用性没有,每次增加新功能所有的代码都的修改!那有什么办法解决上面出现的弊 ...
- ORA-19815,ORA-19809 :limit exceeded for recovery files
数据库重新启动的时候,收到了ORA-19815的错误.从错误的提示来看,是由于闪回区的空间被填满导致无法成功启动.这种情形我们通常考虑的是清除归档日志,那就直接在OS层面rm了,真的是这样吗?客官,如 ...
- C++里面的取整函数
#include<math.h> double ceil(double x) //向上取整 double floor(double x) //向下取整 也能够用数据类型强制转换,那要看数据 ...
- PHP - 类库
常用的PHP类库,PHP开发者必备[转] PHP开发者常用的PHP类库和组件 PDF 生成器 FPDF - 这量一个可以让你生成PDF的纯PHP类库. Excel 相关 你的站点需要生成Excel?没 ...
- ios9 之后 配置百度地图出现的错误
链接地址:http://blog.csdn.net/u011303663/article/details/48596315 错误 ld: '/Users/xxx/Documents/xxx/Baidu ...
- WCF技术剖析之十七:消息(Message)详解(中篇)
原文:WCF技术剖析之十七:消息(Message)详解(中篇) [爱心链接:拯救一个25岁身患急性白血病的女孩[内有苏州电视台经济频道<天天山海经>为此录制的节目视频(苏州话)]]在上篇中 ...
- 跟我一起写 Makefile(一)
跟我一起写 Makefile 陈皓 概述—— 什么是makefile?也许非常多Winodws的程序猿都不知道这个东西,由于那些Windows的IDE都为你做了这个工作,但我认为要作一个好的和pro ...