原来是这样输出的吗

题目描述

实现 Printer 类,使得其对象可以通过 printer(a)(b)(c) 的方式输出 a, b, c。需要支持以下数据类型的输出:

  • int
  • char
  • double
  • C 风格字符串

遇到空的圆括号,则输出一个换行。

关于输入

一行,两个空格分隔的整数 x 和 y。整数在 int 范围内。

关于输出

第一行为 "The sum of x and y is s!";其中 s 是 x 和 y 的和。

第二行为 "The square root of x is r.";其中 r 是 x 的算术平方根。

输出算术类型时,使用默认的 std::ostream 设置。

参考答案

#include <iostream>
#include <cmath>

class Printer {
public:
    Printer operator()() {
        std::cout << std::endl;
        return {};
    }
    Printer operator()(char x) {
        std::cout << x;
        return {};
    }
    Printer operator()(int x) {
        std::cout << x;
        return {};
    }
    Printer operator()(double x) {
        std::cout << x;
        return {};
    }
    Printer operator()(const char* x) {
        std::cout << x;
        return {};
    }
};

int main() {
    Printer printer;

    int x, y;
    std::cin >> x >> y;

    printer("The sum of ")(x)(" and ")(y)(" is ")(x + y)('!')();

    double root = std::sqrt(x);
    printer("The square root of ")(x)(" is ")(root)('.')();
}


 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 











#include <iostream>
#include <cmath>

class Printer {
public:
    Printer operator()() {
        std::cout << std::endl;
        return {};
    }
    template <typename T>
    Printer operator()(const T& x) {
        std::cout << x;
        return {};
    }
};

int main() {
    Printer printer;

    int x, y;
    std::cin >> x >> y;

    printer("The sum of ")(x)(" and ")(y)(" is ")(x + y)('!')();

    double root = std::sqrt(x);
    printer("The square root of ")(x)(" is ")(root)('.')();
}