重载operator<<运算符时第二个参数最好不要写成指向对象的指针

简介:

如题,否则会在调用"std::cout<<this"时”偷偷“调用这个友元函数。本来是想看这个对象的指针值,却看到”不想看到的事情”。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
#include <iostream>
using  std::cout;
using  std::endl;
using  std::ostream;
 
class  Tree {
   int  height;
public :
   Tree( int  treeHeight) : height(treeHeight) {
     cout << __func__ <<  "(), this = "  <<  this  << endl;
   }
   ~Tree() { cout <<  "~Tree()\n" ; }
#if 1 
   friend  ostream&
   operator<<(ostream& os,  const  Tree* t) {
     return  os <<  "Tree height is: "
               << t->height << endl;
   }
#else
   friend  ostream&
   operator<<(ostream& os,  const  Tree& t) {
     return  os <<  "Tree height is: "
               << t.height << endl;
   }
#endif
}; 
 
int  main() {
   Tree* t =  new  Tree(40);
   delete  t;
   t = nullptr;
   delete  t;
}

frank@userver:~/project/test/cpp/new_del$ g++ test2.cpp 

test2.cpp: In function ‘int main()’:

test2.cpp:31:7: error: ‘nullptr’ was not declared in this scope

   t = nullptr;

       ^

frank@userver:~/project/test/cpp/new_del$ g++ test2.cpp  -std=c++11

frank@userver:~/project/test/cpp/new_del$ ./a.out 

Tree(), this = Tree height is: 40


~Tree()


      本文转自FrankNie0101 51CTO博客,原文链接http://blog.51cto.com/frankniefaquan/1936957:,如需转载请自行联系原作者









相关文章
|
存储 编译器 Linux
【c++】类和对象(上)(类的定义格式、访问限定符、类域、类的实例化、对象的内存大小、this指针)
本文介绍了C++中的类和对象,包括类的概念、定义格式、访问限定符、类域、对象的创建及内存大小、以及this指针。通过示例代码详细解释了类的定义、成员函数和成员变量的作用,以及如何使用访问限定符控制成员的访问权限。此外,还讨论了对象的内存分配规则和this指针的使用场景,帮助读者深入理解面向对象编程的核心概念。
837 4
|
存储 C语言 C++
如何通过指针作为函数参数来实现函数的返回多个值
在C语言中,可以通过将指针作为函数参数来实现函数返回多个值。调用函数时,传递变量的地址,函数内部通过修改指针所指向的内存来改变原变量的值,从而实现多值返回。
|
存储 搜索推荐 C语言
如何理解指针作为函数参数的输入和输出特性
指针作为函数参数时,可以实现输入和输出的双重功能。通过指针传递变量的地址,函数可以修改外部变量的值,实现输出;同时,指针本身也可以作为输入,传递初始值或状态。这种方式提高了函数的灵活性和效率。
|
存储 编译器 C语言
C++入门2——类与对象1(类的定义和this指针)
C++入门2——类与对象1(类的定义和this指针)
310 2
|
程序员 C语言
指针在函数参数和返回值中的使用
指针在函数参数和返回值中的使用
|
编译器 C++
virtual类的使用方法问题之在C++中获取对象的vptr(虚拟表指针)如何解决
virtual类的使用方法问题之在C++中获取对象的vptr(虚拟表指针)如何解决
376 4
系统日志使用问题之如何防止在打印参数时遇到NPE(空指针异常)
系统日志使用问题之如何防止在打印参数时遇到NPE(空指针异常)
对象指针输出时分秒
对象指针输出时分秒
102 0
|
编译器 C++
函数指针和函数对象不是同一类型怎么替换
函数指针和函数对象不是同一类型,为何可替换用作同一函数的参数
类与对象\this指针
类与对象\this指针
170 0