C 类内部结构和两个呼叫同时
C++ Class inside Structure and two callings at the same time
在网中某个地方查看C 代码,我注意到这样的代码
opts.addOptions()(cOSS.str(), m_list, XYentry());
我对如何实施该代码印象深刻,当然我想知道它是如何工作的。
所以我试图复制此类型的调用:
#include "stdafx.h"
#include "iostream"
using namespace std;
class mypair {
public:
int x;
int y;
mypair() {
x = 0;
y = 0;
}
void operator()(int x1, int y1) {
x = x1;
y = y1;
cout << "x=" << x << " y=" << y << endl;
}
};
struct myrot {
int left;
int right;
int result;
mypair g;
mypair addOptions() {
g.x = 3;
g.y = 3;
cout << "g.x=" << g.x << endl;
cout << "g.y=" << g.y << endl;
return g;
};
void print_mypair() {
cout << "g.x=" << g.x << endl;
cout << "g.y=" << g.y << endl;
}
void operator()(int y) { result = y; }
void operator() (void) {
cout << "g.x=" << g.x << endl;
cout << "g.y=" << g.y << endl;
}
};
int main()
{
myrot t1;
mypair res;
t1.left = 2;
t1.right = 5;
t1.addOptions()(5,5);
t1.print_mypair();
cout << "t1.g.x=" << t1.g.x << endl;
return 0;
}
调用t1.addOptions()(5,5);
至少在语法级别上似乎几乎相同。所以我的问题是:
1(有这种呼叫的名称吗?2(它如何真正工作?如果我删除成员函数中的返回类型 addoptions ,则会获得错误。同样,如果将t1.addOptions()(5,5);
更改为res = t1.addOptions()(5,5);
,其中 res 将其声明为 mypair ,那么我也会遇到错误。 void operator()(int x1, int y1)
在 addoption 之后被调用,但最终G.x和G.y都具有值3而不是值。
那么,有人可以解释我在这里到底发生了什么?
您的语句
t1.addOptions()(5,5);
基本上是这样的工作:
{
mypair temp_variable = t1.add_options();
temp_variable(5, 5);
}
请注意,由于myrot::addOptions
返回 mypair
对象 by value ,因此在myrot::g
成员变量的A copy 上调用mypair::operator()
函数。如果要修改myrot::g
变量,则必须通过参考:
mypair& addOptions() { ... }
然后等效代码变为
{
mypair& temp_variable = t1.add_options();
temp_variable(5, 5);
}
如果我删除了成员函数addoptions中的返回类型,则会获得错误。
如果将addoptions返回类型更改为void,则不会返回,您将会收到错误,因为没有什么可以拨打操作员((。
也是t1.addoptions(((5,5(;将更改为res = t1.addoptions(((5,5(;在哪里宣布RES为mypair,然后我也会遇到一个错误。
这里是另一种方式。您声明了(( - 操作员返回void。因此,在Res中没有任何保存。
这只是方法的串联。
顺便说一句,您的班级名称应从大写字母开始。并且您的参数应声明为X和Y,以及您的类成员_x和_y或我喜欢的内容:
:void operator()(int x, int y) {
this->x = x;
this->y = y;
cout << "x=" << x << " y=" << y << endl;
}
- 如何在C++中从两个单独的for循环中添加两个数组
- 为什么两个不同的未命名名称空间可以共存于一个cpp文件中
- 当在同一名称空间中有两个具有相同签名的函数时,会发生什么
- 如何返回一个类的两个对象相加的结果
- 如何在C++中将一个无符号的 int 转换为两个无符号的短裤?
- 如何将两个不同矢量的同一位置的两个元素组合在一起
- 两个字符串在 c++ 中不相等
- 在两个类中共享相同的函数调用,并在不需要时避免空实例化
- 两个文件使用彼此的功能-如何解决
- 为什么Mat类的两个对象可以在不重载运算符+的情况下添加
- 如何确保在使用基于布尔值的两个方法之一调用方法时避免分支预测错误
- 停止cmake target_link_libraries将插件中静态库的两个对象文件链接到静态库本身
- 将fold表达式与std::一起用于两个元组
- 如何在C++中比较两个char数组
- 给定两个偶数,求出它们之间所有偶数的平方和
- 比较两个大小不等的映射c++
- C++需要帮助从用户那里获得一个整数,并确保它在另外两个整数之间
- 如何在for循环中包含两个索引值的测试条件
- 在声明中合并两个常量"std::set"(不是在运行时)
- C 类内部结构和两个呼叫同时