class c {
private:
int n[10];
public:
c();
~c();
int operator()(int i) { return n[i];};
};
class cc {
private:
public:
c *mass;
cc();
~cc();
c& operator*() const {return *mass;};
};
int somfunc() {
c *c1 = new c();
cc * cc1 = new cc();
(*cc1->mass)(1);
delete c1;
}
我有一个指向c类的指针c。
有没有办法摆脱这样的记录:
(*cc1->mass)(1);
并写下这样的想法:
cc1->mass(1);
不可能吗?
答案 0 :(得分:1)
始终可以这样做:
class cc {
private:
c *_mass;
public:
c& mass() const {return *_mass;};
};
现在..
cc1->mass()(1);
答案 1 :(得分:1)
如果mass
是对象而不是指针,则可以使用所需的语法:
class cc {
private:
public:
c mass;
cc();
~cc();
const c& operator*() const {return mass;};
};
…
cc1->mass(1);
答案 2 :(得分:1)
当我看到标签“c ++”和“操作员重载”时,我的思维警报会亮起。
C ++运算符重载很复杂,有些运算符如“()”或“ - >”让它变得更加困难。
我建议,在重载运算符之前,使用相同的purpouse进行全局函数或方法,测试它是否有效,然后将其替换为运算符。
全球朋友功能示例:
class c {
private:
int n[10];
public:
c();
~c();
// int operator()(int i) { return n[i]; }
// there is a friend global function, that when receives a "c" object,
// as a parameter, or declares a "c" object, as a local variable,
// this function, will have access to the "public" members of "c" objects,
// the "thisref" will be removed, when turned into a method
friend int c_subscript(c thisref, int i) ;
};
int c_subscript(c* thisref, int i)
{
return c->n[i];
}
int main()
{
c* objC() = new c();
// do something with "objcC"
int x = c_subscript(objC, 3);
// do something with "x"
return 0;
} // int main(...)
本地功能(“方法”)示例:
class c {
private:
int n[10];
public:
c();
~c();
// int operator()(int i) { return n[i]; }
int subscript(int i) ;
};
int c::subscript(int i)
{
return this.n[i];
}
int main()
{
c* objC() = new c();
// do something with "objcC"
int x = c->subscript(objC, 3);
// do something with "x"
return 0;
} // int main(...)
最后使用重载运算符:
class c {
private:
int n[10];
public:
c();
~c();
int subscript(int i) ;
int operator()(int i) { return this.subscript(i); }
};
int c::subscript(int i)
{
return this.n[i];
}
int main()
{
c* objC() = new c();
// do something with "objcC"
int x = c->subscript(3);
// do something with "x"
int x = c(3);
// do something with "x"
return 0;
} // int main(...)
请注意,在最后一个示例中,我使用唯一标识符保留该方法。
干杯。
答案 3 :(得分:0)
你可以用
(*(*cc1))(1)
因为operator()
应用于对象,而不是指针。
答案 4 :(得分:0)
您可以使用
(**cc1)(1);
或者
cc1->mass->operator()(1);