c++ - 输入运算符时程序输出奇怪?

标签 c++

我可能在这里遗漏了一些明显的东西。这是我的代码(我只是在学习真正的 C++,我想进行一些练习):

#include <iostream>
#include <cstring>

using namespace std;

class String {
private:
    char * value;
    int len;
    friend ostream & operator<<(ostream & os, String s);
public:
    String();
    String(const char * base);
    ~String();
    String operator+(String s);
    String operator*(int n);
    int length();
};

String::String() {
    this->value = new char[0];
    this->len = 0;
}

String::String(const char * base) {
    this->value = new char[this->len = strlen(base)];
    strcpy(this->value, base);
}

String::~String() {
    delete [] this->value;
}

int String::length() {
    return this->len;
}

String String::operator+(String s) {
    String n;
    delete [] n.value;

    cout << "Upon entering, I am: \"" << *this << "\"\n";

    n.value = new char[this->len + s.len];
    for(int i = 0; i < this->len; i++) {
        n.value[i] = this->value[i];
    }
    for(int i = 0; i < s.len; i++) {
        n.value[i + this->len] = s.value[i];
    }

    n.len = this->len + s.len;

    cout << "String::operator+(" << *this << ", " << s << ") succeeded with new value = \"" << n << "\"\n";

    return n;
}

String String::operator*(int n) {
    String s;
    delete [] s.value;

    s.value = new char[this->len * n];

    for(int i = 0; i < this->len * n; i++) {
        s.value[i] = this->value[i % this->len];
    }

    cout << "String::operator* succeeded with new value = \"" << s << "\"\n";

    return s;
}

ostream & operator<<(ostream & os, String s) {
    return os << s.value;
}

int main() {
    String s("Hello, world!");
    cout << s << "\nLength = " << s.length() << "\n\n";
    cout << (s + String("\n")) * 5;
    return 0;
}

并且字符串初始化并正确显示,但我的输出真的很奇怪;似乎在输入运算符+时,“你好,世界!”突然变成“x%r”?

C:\Users\Ryan\Documents\My Dropbox\C++ Projects>strings
Hello, world!
Length = 13

Upon entering, I am: "x%r"
String::operator+(x%r,
) succeeded with new value = "x%r"
String::operator* succeeded with new value = "╚%r"
─

最佳答案

试试这个:

ostream & operator<<(ostream & os, const String& s) {
    return os << s.value;
}

否则你应该为你的 String 类定义复制构造函数。

关于c++ - 输入运算符时程序输出奇怪?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6118733/

相关文章:

c++ - 'PointType' 不是 ‘Point’ 的成员

c++ - 为 Visual Studio 2003 使用正则表达式的替代方法

c++ - 纯虚函数是如何被调用的

java - C++ 将 HashMap<string, boolean> 对象返回给 Java

c++ - 我怎么知道一个项目是不是MFC应用程序

c++ - 从文件中引用不同名称的类的方法

c++ - Objective-C++ 对 UI 的绝对混淆;最佳实践

c++ - 检测到 OpenCv 二维码但无法解码

c++ - Wifi 原始数据传输

c++ - MSVCR 和 CRT 初始化