luk*_*kai 10 c++ pointers class
在c ++中我们知道对于类的指针,我们使用( - >)箭头操作符来访问该类的成员,如下所示:
#include <iostream>
using namespace std;
class myclass{
private:
int a,b;
public:
void setdata(int i,int j){
a=i;
b=j;
}
};
int main() {
myclass *p;
p = new myclass;
p->setdata(5,6);
return 0;
}
Run Code Online (Sandbox Code Playgroud)
然后我创建了一个"myclass"数组.
p=new myclass[10];
Run Code Online (Sandbox Code Playgroud)
但是,当我myclass通过( - >)箭头操作符访问成员时,我得到以下错误
base operand of '->' has non-pointer type 'myclass'
Run Code Online (Sandbox Code Playgroud)
但是当我通过(.)运算符访问类成员时,它可以工作.这些事让我感到困惑.为什么类I的数组必须使用(.)运算符.
Ops*_*nas 15
你应该阅读指针和参考之间的区别,这可能有助于你理解你的问题.
简而言之,不同之处在于:
当你创建myclass *p它时,它是一个指针,你可以访问它的成员->,因为它p指向内存位置.
但是一旦你打电话p=new myclass[10]; p开始指向数组,当你打电话给p[n]你时,你会得到一个参考,必须使用哪些成员来访问..
但是如果你使用p->member = smth它就像你调用的那样p[0].member = smth,因为number in []是从p搜索下一个数组成员的位置的偏移量,例如(p + 5)->member = smth将与p[5].member = smth
注意,对于指针变量x
myclass *x;
Run Code Online (Sandbox Code Playgroud)
*x 意思是"获取x指向的对象"x->setdata(1, 2)是(*x).setdata(1, 2)最后一样的x[n] 意思是"获取数组中的第n个对象".所以例如x->setdata(1, 2)是相同的x[0].setdata(1, 2).
| 归档时间: |
|
| 查看次数: |
23360 次 |
| 最近记录: |