飞道的博客

C/C++编程笔记:在C++中使用显式关键字

350人阅读  评论(0)

首先,我们看一看下面这个C ++程序的输出。


  
  1. #include <iostream>
  2. using namespace std;
  3. class Complex
  4. {
  5. private:
  6. double real;
  7. double imag;
  8. public:
  9. // Default constructor
  10. Complex( double r = 0.0, double i = 0.0) : real(r), imag(i) {}
  11. // A method to compare two Complex numbers
  12. bool operator == (Complex rhs) {
  13. return (real == rhs.real && imag == rhs.imag)? true : false;
  14. }
  15. };
  16. int main()
  17. {
  18. // a Complex object
  19. Complex com1(3.0, 0.0);
  20. if (com1 == 3.0)
  21. cout << "Same";
  22. else
  23. cout << "Not Same";
  24. return 0;
  25. }

输出:程序编译正常,并产生以下输出。

Same

在C ++中,如果类具有可以用单个参数调用的构造函数,则该构造函数将成为转换构造函数,因为这样的构造函数允许将单个参数转换为正在构造的类。

我们可以避免这种隐式转换,因为它们可能导致意外的结果。例如,如果尝试下面的程序,该程序使用带有构造函数的显式关键字,则会出现编译错误。


  
  1. #include <iostream>
  2. using namespace std;
  3. class Complex
  4. {
  5. private:
  6. double real;
  7. double imag;
  8. public:
  9. // Default constructor
  10. explicit Complex(double r = 0.0, double i = 0.0) : real(r), imag(i) {}
  11. // A method to compare two Complex numbers
  12. bool operator== (Complex rhs) {
  13. return (real == rhs.real && imag == rhs.imag)? true : false;
  14. }
  15. };
  16. int main()
  17. {
  18. // a Complex object
  19. Complex com1(3.0, 0.0);
  20. if (com1 == 3.0)
  21. cout << "Same";
  22. else
  23. cout << "Not Same";
  24. return 0;
  25. }

输出:编译器错误

在'com1 == 3.0e + 0'中找不到'operator =='的匹配项

我们仍然可以将double值类型转换为Complex,但是现在我们必须显式类型转换。例如,以下程序可以正常运行。


  
  1. #include <iostream>
  2. using namespace std;
  3. class Complex
  4. {
  5. private:
  6. double real;
  7. double imag;
  8. public:
  9. // Default constructor
  10. explicit Complex(double r = 0.0, double i = 0.0) : real(r), imag(i) {}
  11. // A method to compare two Complex numbers
  12. bool operator== (Complex rhs) {
  13. return (real == rhs.real && imag == rhs.imag)? true : false;
  14. }
  15. };
  16. int main()
  17. {
  18. // a Complex object
  19. Complex com1(3.0, 0.0);
  20. if (com1 == (Complex) 3.0)
  21. cout << "Same";
  22. else
  23. cout << "Not Same";
  24. return 0;
  25. }

输出:程序编译正常,并产生以下输出。

Same

以上就是今天的全部内容了。每日分享小知识,希望对你有帮助~

另外如果你想更好的提升你的编程能力,学好C语言C++编程!弯道超车,快人一步!笔者这里或许可以帮到你~

C语言C++编程学习交流圈子,QQ群:765803539点击进入】微信公众号:C语言编程学习基地

分享(源码、项目实战视频、项目笔记,基础入门教程)

欢迎转行和学习编程的伙伴,利用更多的资料学习成长比自己琢磨更快哦!

编程学习视频分享:

 


转载:https://blog.csdn.net/qq_42366672/article/details/116207553
查看评论
* 以上用户言论只代表其个人观点,不代表本网站的观点或立场