优化推广网站淄博,公司logo在线设计免费,广东建设信息网行业服务版官网,wordpress类别生成标签二#xff0c;指针和引用 共同点#xff1a;它们都代表其他变量占据的某一块内存区#xff0c;通过指针或引用都可以对他们代表的其他变量进行操作。 以下语句利用指针对变量赋值#xff1a;
int m;
int *p; //指针定义
p m; //将m的内存地址赋给p
*p 5;…二指针和引用
· 共同点它们都代表其他变量占据的某一块内存区通过指针或引用都可以对他们代表的其他变量进行操作。
· 以下语句利用指针对变量赋值
int m;
int *p; //指针定义
p m; //将m的内存地址赋给p
*p 5; // 通过指针对变量m赋值
· 而下面的语句则是利用引用做同样的事情
int m;
int q m;
q 5;
·注意上面两段代码放在等号右侧的某个变量前一般是取地址
而在定义变量时在变量前出现的符合是引用。
· 引用只能在定义时被初始化一次之后不可变
而指针可变例如语句 int q m 是正确的但是下面写法不对
int q;
q m
而且q一旦和m绑定就不可改变。
而指针不同指针p可以先指向m即p m使用完毕后可以让p指向其他变量比如再执行p k
· 引用不能为空指针可以空
因为引用必须再定义时直接初始化因此引用就不会为NULL而指针可以是NULL。
可以用指针或引用代表对象
类对象指针和引用的使用
比如
Account myAccount;
Account q1 myAccount; //q1为Account类引用// 可以定义指针p1让p1指向myAccount使用下面语句Account *p1;
p1 myAccount;//类对象指针或引用常常出现在函数的参数表或返回值中
· 利用类对象指针实现转账函数
bool transfer(Account *pA,Account *pB,float m)
{if(pA-withdraw(m) 1) //若A取款成功{pB-deposits(m); //向B存款return ture}else return false
}//调用函数时用下面语句
transfer(myAccount,account[0],1000.0);
//相当于执行下面语句
pA myAccount;
pB account[0];
//myAccount和account[0]被修改
· 下面是利用类对象的引用实现转载函数
bool transfer(Account A,Account B,float m)
{if(A.withdraw(m) 1) //若A取款成功{B.deposits(m); //向B存款return true}else return false
}
//这个函数和第一个版本的差别仅仅在形式参数中变量A和B是引用类型。调用函数时使用下面语句
transfer(myAccount,account[0],1000.0);
//相当于执行下面语句
Account A myAccount;
Account B account[0];
//myAccount和account[0]被修改
动态创建对象
如果定义了指针后不想让指针指向某个已经定义好的对象那么可以使用动态创建对象的方法为指针生成一个对象。这时要使用C语言的new操作符
Account *pA;
pA new Account; //动态创建Account对象Account *pB;
pB new Account[10]; //动态创建10个对象
动态创建的对象只能通过指针使用因为他们没有其他名字。比如下面语句输出公有数据成员
cout pA-ID pA-Name;
当动态创建的对象使用完毕后C可以动态的删除前面的动态创建的对象这需要使用delete此操作
delete pA; //删除和pA关联的动态对象
注意只有当没有其他指针除pA指向这个动态对象时delete才能真正删除动态对象
对象自身的指针this
每个对象都有一个指向直接的指针---this指针。
当一个函数中的局部变量和类对象的数据成员变量同名时一定要使用this指针。
class Account
{
public:int ID;char Name[20];float balance;void Initial(int ID,char Name[],float balance);.....
};
void Account::Initial(int ID,char Name[],float balance)
{this-ID ID ; //将传入的ID赋给当前对象的IDstrcpy(this-Name,Name); //将传入的Name赋给当前对象的Namethis-balance balance ; //将传入的balance赋给当前对象的balance
}
如果不想使用this则参数表里的变量一定要换个名字这时局部变量就不会和类的成员重名不会有二义性。