箭头操作符
来源:互联网 发布:慈心渡鬼软件 编辑:程序博客网 时间:2024/05/18 08:28
C++语言为包含点操作符和解引用操作符的表达式提供了一个同义词:箭头操作符(->).点操作符用于获取类类型对象的成员:
item1.same_isbn(item2); //run the same_isbn member of item1
如果有一个指向Sales_item对象的指针(或迭代器),则在使用点操作符前,需对该指针(或迭代器)进行解引用:
Sales_item *sp=&item1;
(*sp).same_isbn(item2); //run same_isbn on object to which sp points
这里,对sp进行解引用以获得指定的Sales_item对象.然后使用点操作符调用指定对象的same_isbn成员函数.在上述用法中,注意必须用圆括号把解引用括起来,因为解引用的优先级低于点操作符.如果漏掉圆括号,则这段代码的含义就完全不同了:
// run the same_isbn member of sp then dereference the result!
*sp.same_isbn(item2); //error:sp has no member named same_isbn
这个表达式企图获得sp对象的same_isbn成员.等价于:
*(sp.same_isbn(item2)); //equivalent to *sp.same_isbn(item2);
然后,sp是一个没有成员的指针;这段代码无法通过编译.
因为编程时很容易忘记圆括号,而且这类代码又经常使用,所以C++为在点操作符后使用的解引用操作定义了一个同义词:箭头操作符(->).假设有一个指向类类型对象的指针(或迭代器),下面的表达式互相等价:
(*p).foo; //dereference p to get an object and fetch its member named foo
p->foo; //equivalent way to fetch the foo from the object to which p points
具体地,可将same_isbn的调用重写为:
sp->same_isbn(item2); //equivalent to (*sp).same_isbn(item2)
习题 5.18 编写程序定义一个vector对象,其每个元素都是指向string类型的指针,读取该vector对象,输出每个string的内容极其相应的长度.
#include<iostream>
#include<string>
#include<vector>
using namespace std;
int main()
{
vector<string*> svec;
//读取vector对象
string str;
cout<<"Enter some strings(Ctrl+Z to end)"<<endl;
while(cin>>str){
string *pstr=new string;//指向string对象的指针
*pstr=str;
spvec.push_back(pstr);
}
//输出每个string的内容极其相应的长度
vector<string*>::iterator iter=spvec.begin();
while(iter!=spvec.end()){
cout<<**iter<<(**iter).size()<<endl;
iter++;
}
//释放各个动态分配的string对象
iter=spvec.begin();
while (iter!=spvec.end())
{
delete *iter;
iter++;
}
return 0;
}
习题5.19 假设iter为vector<string>::iterator类型的变量,指出下面哪些表达式是合法的,并解释这些合法表达式的行为.
a.*iter++;
b.(*iter)++;
c.*iter.empty();
d.iter->empty();
e.++*iter;
f.iter++->empty();
a返回iter所指向string对象,并使iter加1.
d调用iter所指向的string对象的成员函数empty.
f调用iter所指向的string对象的成员函数empty,并使iter加1
- 箭头操作符
- 重载箭头操作符
- 重载箭头操作符
- 箭头操作符
- 箭头操作符2
- 箭头(->)操作符重载
- c++重载箭头操作符
- C++重载箭头操作符
- C++重载箭头操作符
- perl中的箭头操作符
- C++重载箭头操作符
- ES6 箭头操作符 =>
- 点操作符和箭头操作符
- 点操作符和箭头操作符
- 点操作符和箭头操作符
- C++重载箭头操作符的理解
- C++重载箭头操作符的理解
- C++重载箭头操作符的理解
- 第二篇 Spring与Hibernate的融合
- 郁闷的周末
- 钱包里的3句话
- 第三篇 整合struts+spring+hibernate
- VB.NET模块的总结(一)
- 箭头操作符
- 创建filter笔记
- weblogic集群
- 也谈anyP的关张
- when pigs fly
- 创建一个filter实例(transform filter)
- 微笑面对一切
- 敏捷实践中的好品质
- 考场考号自动安排程序