Tag: 成员函数

为什么一些操作符只能作为成员函数被重载,其他的作为朋友函数,其余的都作为成员函数?

为什么一些运算符只能作为成员函数被重载,其他的则作为非成员的“自由”函数,其余的都作为成员函数? 这些背后的理由是什么? 如何记住哪些运算符可以被重载为(成员,自由,或两者)?

为什么在非consttypes的私有方法中不调用公共const方法?

考虑这个代码: struct A { void foo() const { std::cout << "const" << std::endl; } private: void foo() { std::cout << "non – const" << std::endl; } }; int main() { A a; a.foo(); } 编译器错误是: 错误:'void A :: foo()'是私人的。 但是,当我删除私人的只是工作。 为什么在非consttypes的私有方法时不调用公共const方法? 换句话说,为什么在访问控制之前重载parsing? 这很奇怪。 你认为这是一致的吗? 我的代码工作,然后我添加一个方法,我的工作代码根本不编译。

有效的C ++项目23首选成员函数的非成员非友元函数

对于课堂devise中的一些事实,特别是function是否应该是成员,我考虑了一下Effective c ++,find了第23项,即非成员非好友函数。 用Web浏览器的例子第一手的阅读是有道理的,然而在这个例子中,便利的function(在这本书中命名为非成员函数)改变了这个类的状态,不是吗? 所以,第一个问题,他们不应该是成员吗? 进一步阅读,他认为STL函数,实际上一些类没有实现的函数都是在stl中实现的。 按照本书的思想,它们演变成一些便利的function,它们被压缩到一些合理的命名空间中,比如std::sort , std::copy from algorithm 。 例如, vector类没有sort函数,而使用stl sort函数,所以不是vector类的成员。 但是也可以将相同的推理延伸到vector类中的其他一些函数,比如assign这样也可以不作为成员实现,而是作为一个便利函数。 但是,这也会改变对象的内部状态,就像它所操作的那样。 那么这个微妙但重要的(我猜)问题背后的理由是什么? 如果你有机会获得这本书,你能否为我澄清这些问题?

运算符重载:成员函数与非成员函数?

我读过一个被声明为成员函数的重载运算符是不对称的,因为它只能有一个参数,而另一个自动传递的参数是'this'指针。 所以没有标准来比较它们。 另一方面,声明为朋友的重载运算符是对称的,因为我们传递了两个相同类型的参数,因此可以进行比较。 我的问题是,当我仍然可以比较指针的左值参考,为什么朋友首选? (使用不对称版本会得到与对称相同的结果)为什么STL算法只使用对称版本?