拓展运动概念:浅谈C/C++中的对象指针和对象引用
来源:百度文库 编辑:中财网 时间:2024/05/08 14:11:23
对象指针和对象引用
指向类的成员的指针
在C++中,可以说明指向类的数据成员和成员函数的指针。
指向数据成员的指针格式如下:
<类型说明符><类名>::*<指针名>
指向成员函数的指针格式如下:
<类型说明符>(<类名>::*<指针名>)(<参数表>)
例如,设有如下一个类A:
class A
{
public:
int fun (int b) { return a*c+b; }
A(int i) { a=i; }
int c;
private:
int a;
};
定义一个指向类A的数据成员c的指针pc,其格式如下:
int A:: *pc = &A::c;
再定义一个指向类A的成员函数fun的指针pfun,其格式如下:
int (A:: *pfun)(int) = A::fun;
由于类不是运行时存在的对象。因此,在使用这类指针时,需要首先指定A类的一个对象,然后,通过对象来引用指针所指向的成员。例如,给pc指针所指向的数据成员c赋值8,可以表示如下:
A a;
a.*pc = 8;
其中,运算符.*是用来对指向类成员的指针来操作该类的对象的。
如果使用指向对象的指针来对指向类成员的指针进行操作时,使用运算符->*。例如:
A *p = &a; //a是类A的一个对象,p是指向对象a的指针。
p ->* pc = 8;
让我们再看看指向一般函数的指针的定义格式:
<类型说明符>*<指向函数指针名>(<参数表>)
关于给指向函数的指针赋值的格式如下:
<指向函数的指针名>=<函数名>
关于在程序中,使用指向函数的指针调用函数的格式如下:
(*<指向函数的指针名>)(<实参表>)
如果是指向类的成员函数的指针还应加上相应的对象名和对象成员运算符。
下面给出一个使用指向类成员指针的例子:
#include
class A
{
public:
A(int i) { a=i; }
int fun(int b) { return a*c+b; }
int c;
private:
int a;
};
void main()
{
A x(8); //定义类A的一个对象x
int A::*pc; //定义一个指向类数据成员的指针pc
pc=&A::c; //给指针pc赋值
x.*pc=3; //用指针方式给类成员c赋值为3
int (A::*pfun)(int); //定义一个指向类成员函数的指针pfun
pfun=A::fun; //给指针pfun赋值
A *p=&x; //定义一个对象指针p,并赋初值为x
cout<<(p->*pfun)(5)<}
以上程序定义了好几个指针,虽然它们都是指针,但是所指向的对象是不同的。p是指向类的对象;pc是指向类的数据成员;pfun是指向类的成员函数。因此它们的值也是不相同的。
对象指针和对象引用作函数的参数
1. 对象指针作函数的参数
使用对象指针作为函数参数要经使用对象作函数参数更普遍一些。因为使用对象指针作函数参数有如下两点好处:
(1) 实现传址调用。可在被调用函数中改变调用函数的参数对象的值,实现函数之间的信息传递。
(2) 使用对象指针实参仅将对象的地址值传给形参,而不进行副本的拷贝,这样可以提高运行效率,减少时空开销。
当形参是指向对象指针时,调用函数的对应实参应该是某个对象的地址值,一般使用&后加对象名。下面举一例子说明对象指针作函数参数。
#include
class M
{
public:
M() { x=y=0; }
M(int i, int j) { x=i; y=j; }
void copy(M *m);
void setxy(int i, int j) { x=i; y=j; }
void print() { cout<private:
int x, y;
};
void M::copy(M *m)
{
x=m->x;
y=m->y;
}
void fun(M m1, M *m2);
void main()
{
M p(5, 7), q;
q.copy(&p);
fun(p, &q);
p.print();
q.print();
}
void fun(M m1, M *m2)
怎样显示C盘中的隐藏对象?
什么是未将对象引用设置到对象的实例?c#.net
什么是java中的对象引用
C++k 引用和指针有什么不同?指针加上什么限制等于引用?
c中的指针
cad:如何引用符号库中的对象?
电脑中的”未设置对象引用”是什么意思?
请问C和JAVA一样都是面向对象?请问!何为面向对象
C#中如何销毁一个对象?
C#的对象分配和C++有什么不同?(针对C++的几种分配对象空间的语句分析)。
c:\windows\desktop\新建文档.ink引用的对象已删除或不可访问
怎样理解java 中的“引用”、“对象”、“构造方法”“方法”
C语言中的数组与指针问题
什么是指针??计算机C语言中的。
C语言中的空指针是什么意思?
FRAME之间对象如何引用?
C盘里有一个searchnet中的中搜在线的地址栏搜索程序无法删除。卡巴斯基检测其为危险对象。
求面向对象编程的学生成绩管理系统(C++)~!
c语言是否是面向对象的程序语言?
《C和指针》电子书,有的发给我
c语言的问题 数组和指针
什么是Java中的对象?
什么是Java中的对象?
指针与对象有什么区别?!