重载+添加两个指针

时间:2010-06-14 05:32:14

标签: c++ overloading operator-keyword

我有一个String类,我想重载+来添加两个String *指针。 这样的事情不起作用:

String* operator+(String* s1, String* s2);

有没有办法避免通过引用传递。 考虑这个例子:

String* s1 = new String("Hello");
String* s2 = new String("World");

String* s3 = s1 + s2;

我需要这种额外的工作。请建议。

4 个答案:

答案 0 :(得分:8)

你做不到。您不能为内置类型重载运算符。无论如何,为什么要使用指针呢?尽可能避免动态分配!

String s1("Hello");
String s2("World");

String s3 = s1 + s2;

那好多了,不泄漏。现在你可以重载:

String operator+(const String& s1, const String& s2);

你的愿望。当然,这是浪费时间,因为std::string存在。 :)

答案 1 :(得分:2)

你不能只用指针重载。您需要至少有一个类类型或枚举值。标准方法是重载两个值:

String operator+(String s1, String s2);

答案 2 :(得分:2)

  

我有一个String类,我想   重载+添加两个字符串*   指针。

为什么?

  

这样的事情不起作用:

     

String * operator +(String * s1,String *   S2);

这是c ++核心功能。你无法改变它。

  

有没有办法避免路过   参考

您可以通过引用,指针或值传递。

按价值效率低下(因为没有正当理由而临时创建和复制*)

指针在这种情况下不可用(添加指针是核心语言功能)。事实上,引用被添加到语言中,以将传递指针作为参数(重载运算符)的效率与传递值的方便语法相结合。换句话说,引用是根据您的具体情况创建的语言功能。它们是最佳解决方案。

通过引用是通常接受的解决方案。你能告诉我们为什么你的情况不好吗?

  

考虑这个例子:

     

String * s1 = new String(“Hello”);   String * s2 = new String(“World”);

     

String * s3 = s1 + s2;

这看起来像Java或C#代码,翻译成C ++语法。 不要那样做。这种心态被称为“我可以使用任何语言编写C语言”,它通常会将您尝试移植到C ++中的任何心态的固有问题与C ++的固有问题相结合,而没有任何优势。

我不是说你这样做,我只是说要确保你还没有这样做:)。

  

我需要这种额外的工作。   请建议。

您可以定义一个额外的智能指针类来保存字符串。它不需要做太多(仅struct ptr { String* _value; /* add your syntax sugar and operators here */ }就足够了。也就是说,仅仅为了添加指针,这仍然是一个坏主意

答案 3 :(得分:1)

不确定您是否已经明白这一点,但String* s3 = s2 + s1; 添加2个指针且 2个字符串,并且您无法更改语义在这里。

欢迎您拥有自己的String类,但请确保您确实需要它。在最一般的情况下,std :: string就足够了。

当你在它的时候,尽量不要偏离太多,除非当然有来自标准的类似类的暴露API的正当理由。所以也许你可以用1个字符串和1个字符串*做一个操作符+,但你真的想要吗?如果人们需要维护你的代码,并且来自STL / Boost背景,那么期望事情就是以某种方式工作。这有助于调试更轻松。

Arpan