21xrx.com
2024-09-19 09:35:03 Thursday
登录
文章检索 我的文章 写文章
C++中自定义输出运算符重载
2023-07-05 12:16:05 深夜i     --     --
C++ 自定义 输出运算符 重载

在C++中,我们可以使用运算符重载(Operator Overloading)来对已有的运算符进行重新定义,使其可以对自定义的类型进行操作。其中,自定义输出运算符重载(<<)也是一种非常实用的技巧。

自定义输出运算符重载允许我们通过cout输出我们自定义的类型对象。假设我们有一个类叫做Person,它有两个私有属性,一个是name,一个是age。现在我们希望在输出一个Person对象时,能够直接输出它的属性值。这时候就可以使用自定义输出运算符重载。

下面是一个简单的Person类的定义:


class Person {

private:

  std::string name;

  int age;

public:

  Person(std::string Name, int Age) : name(Name), age(Age) {};

  friend std::ostream& operator<<(std::ostream& os, const Person& p);

};

在类的定义中,我们定义了一个友元函数 std::ostream& operator<<,它接受两个参数,一个是std::ostream流对象,一个是Person对象。这个函数的作用是将Person对象的属性值输出到流对象中。

在具体实现这个函数时,我们可以直接利用流对象输出Person对象的属性值,也可以使用流对象调用其成员函数put()和write()来输出属性值。下面是两种实现方式:


std::ostream& operator<<(std::ostream& os, const Person& p) {

  // 方法1

  os << "name: " << p.name << ", age: " << p.age;

  // 方法2

  //os.write(reinterpret_cast<const char*>(&p.age), sizeof(p.age));

  //os.put(' ');

  //os.write(p.name.c_str(), p.name.size());

  return os;

}

需要注意的是,在函数的参数中,我们将Person对象的引用使用了const修饰符,这是因为输出运算符重载函数中不应该修改Person对象的属性值。

使用自定义输出运算符重载时,我们可以像下面这样输出一个Person对象:


Person p("Tom", 18);

std::cout << p << std::endl;

程序的输出结果为:


name: Tom, age: 18

总之,自定义输出运算符重载是C++中非常有用的技巧之一,能够让我们更方便地输出自定义类型的对象。需要注意的是,在自定义输出运算符重载函数中,我们应该遵循C++编码规范并正确地实现这个函数。

  
  

评论区

{{item['qq_nickname']}}
()
回复
回复