美文网首页
[陈宗权C++]C++第4天AM--静态成员函数_运算符重载_临

[陈宗权C++]C++第4天AM--静态成员函数_运算符重载_临

作者: Optimization | 来源:发表于2020-01-30 15:56 被阅读0次

    参考:

    重点:

    • 编译器会把运算符看成运算符函数
    • 运算符函数的形参一定是引用的,尽量加const,要改变的加const
    • 友元函数,允许这个函数访问这个类的私有成员
    • 形参是等类类型的是拷贝构造函数
    • 匿名对象,编译器优化,直接用创建临时对象的参数来创建1个新对象,不t2会调用复制构造函数
    • 赋值,不会调复制构造函数,因为没有新对象,临时对象当场释放

    正文:

    ////达内C++教程\03_标准C++编程_陈宗权_7day\标准C++编程_day04AM_静态成员函数_运算符重载_临时对象  TEST1
    //
    //#include<iostream>
    //using namespace std;
    //
    ////编译器会把运算符看成运算符函数
    //// F a,b;
    //// a+b;//看成a.operator+(b);或者operator+(a,b)
    ////运算符函数的形参一定是引用的,尽量加const,要改变的加const
    //
    //class fenshu {
    //  int n;
    //  int d;
    //
    //  void reduce() {}
    //  friend ostream& operator<<(ostream& out, const fenshu& f1);
    //
    //public:
    //  fenshu(int n = 0, int d = 1) :n(n), d(d)
    //  {
    //      if (d == 0) throw 0;
    //      if (d < 0) d = -d, n = -n;
    //      reduce();
    //      std::cout << "fenshu" << n << "/" << d << "\n";
    //  }
    //
    //  
    //  // 静态成员函数,和对象没关系的函数,没有this
    //  //  
    //  static int maxcd(int a, int b) 
    //  {
    //      std::cout << a << "/" << b<< "\n";
    //      return a;
    //  }
    //  //友元函数,允许这个函数访问这个类的私有成员
    //  friend fenshu operator+(const fenshu& lh, const fenshu&rh) 
    //  {
    //      fenshu res(lh.n*rh.d + lh.d*rh.n, lh.d*rh.d);
    //      return res;
    //  }
    //
    //  //因为对象是临时的,所以不加引用
    //  fenshu operator*(const fenshu& rh) const/*保证当前对象是可读的*/ 
    //  {
    //      /*fenshu res(n*rh.n,d*rh.d);
    //      return res;*/                   //普通方式
    //      return fenshu((n*rh.n, d*rh.d));//匿名对象
    //  }
    //  
    //};
    //// 用友元访问类的私有成员,他不是成员函数
    //ostream& operator<<(ostream& out, const fenshu& f1)
    //{
    //  out << f1.d << ", " << f1.n;
    //  return out;
    //}
    //
    //int main()
    //{
    //  fenshu f1;
    //  fenshu f2(12,1);
    //  fenshu f3(12, 3);
    //  std::cout <<f1<< f2;//operator<<(cout,f2);
    //  
    //  //不属于某个对象
    //  fenshu::maxcd(1,2);
    //  //f1+f2解过是个临时值,常量 得加const!!!!!!!!!!!!!!!!!!!!!!!!!!
    //  std::cout << f1 + f2 +f3 << f1 + f3 << std::endl;
    //  cout << f1*f2 << std::endl;//f1.operator*(f2);
    //  system("pause");
    //              
    //}
    
    
    ////达内C++教程\03_标准C++编程_陈宗权_7day\标准C++编程_day04AM_静态成员函数_运算符重载_临时对象  TEST2
    
    //形参是等类类型的是拷贝构造函数
    
    #include <iostream>
    #include <string>
    using namespace std;
    
    class Teacher {
        string name;
        string course;
    
    public:
        Teacher(const char* n, const char* c) :name(n), course(c) {
            cout << "创建"<< course <<"老师"<<name<< endl;
        }
        Teacher(const Teacher& t) :name(t.name), course(t.course) {
            cout << "复制" << course << "老师" << name << endl;
        }
    
        ~Teacher() {
            cout << "辞退" << course << "老师" << name << endl;
        }
    
    
    };
    
    int main()
    {
        Teacher t1("陈宗权","C++");
        Teacher t2 = t1;//初始化
        Teacher t3 = Teacher("yangqiang", "UC");//匿名对象,编译器优化,直接用创建临时对象的参数来创建1个新对象,不t2会调用复制构造函数
        t2 = t3;//赋值
        cout <<"................"<< std::endl;
        t2 = Teacher("徐薇","咨询");//赋值,不会调复制构造函数,因为没有新对象,临时对象当场释放
        cout << "................" << std::endl;
        system("pause");
    }
    
    

    相关文章

      网友评论

          本文标题:[陈宗权C++]C++第4天AM--静态成员函数_运算符重载_临

          本文链接:https://www.haomeiwen.com/subject/ruwithtx.html