C++学习 (使用类)

来源:互联网 发布:sql求和保留两位小数 编辑:程序博客网 时间:2024/06/06 09:12
  • 友元函数,
    常用的是对<<的重载
#include <stdio.h>#include <iostream>using namespace std;struct node{    double x;    double y;    node(){};    node(int _x, int _y){       x =(double) _x;       y = (double) _y;    }    node (double _x, double _y)    {        x =_x;        y = _y;    }   friend void operator <<(ostream & os, const node &t);};void operator <<(ostream & os, const node &t){  os << "x : "<<t.x << "  y :"<< t.y<<endl;}int main(){    node a = node(1.0, 2.0);    node b = node(3.0, 4.0);    cout<<a;    //cout<<a<<b<<endl; error!!!!}

这时候使用 cout<

std::ostream & operator<<(std::ostream & os, const node &t){   os << "x : "<<t.x << "  y :"<< t.y<<endl;   return os;}并且一定是 std::ostream & 

然后就是今天发现了要给比较神奇的事情。。。原来学的C,c++真的是渣渣,原来结构体也可以类型转换的,只有定义了相应构造函数,而且还分强制类型转换,和隐式转换

#include <stdio.h>#include <iostream>using namespace std;struct node{    double x;    double y;    node(){};    node(int _x){       x =(double) _x;    }    node (double _x)    {        x =_x;    }};int main(){    node now;    now = double(1.3);    cout<<now.x<<endl;//隐式}

如果不想让它这样 加上 explicit

#include <stdio.h>#include <iostream>using namespace std;struct node{    double x;    double y;    node(){};   explicit node(int _x){       x =(double) _x;    }   explicit node (double _x)    {        x =_x;    }};int main(){    node now;    node = (double)1.3   // now = node(1.3); right    cout<<now.x<<endl;}

这样就关闭了隐式,但是显示转换还是可以得

0 0