如何在C++中用=运算符单独赋值complex变量的实部与虚部?
实现支持单独赋值/取值的Point类(基于std::complex<>)
你只需要让Point类的real()和imag()成员函数直接返回std::complex对应成员的引用即可,同时为了支持const对象,需要重载这两个函数的const版本。完整实现如下:
#include <complex> #include <iostream> class Point { private: std::complex<int> my_point; // 建议设为private,保证封装性 public: // 非const版本:返回引用,支持赋值操作 int& real() { return my_point.real(); } int& imag() { return my_point.imag(); } // const版本:返回const引用,支持const对象读取值 const int& real() const { return my_point.real(); } const int& imag() const { return my_point.imag(); } }; int main() { Point p; p.real() = 10; p.imag() = 20; std::cout << "p.real() = " << p.real() << std::endl; // 输出10 std::cout << "p.imag() = " << p.imag() << std::endl; // 输出20 // 测试const对象的取值 const Point cp = p; std::cout << "cp.real() = " << cp.real() << std::endl; // 输出10 return 0; }
关键说明:
std::complex<T>的real()和imag()本身就提供双重载:非const版本返回T&(可作为左值赋值),const版本返回const T&(仅用于读取),我们只需要透传这两个接口即可。- 将内部的
my_point设为private是面向对象封装的标准做法,避免直接暴露内部实现细节。 - 必须补充
const版本的成员函数,否则无法在const Point对象上调用real()或imag()来读取值。
内容的提问来源于stack exchange,提问作者For
相关产品推荐
相关产品推荐

