zoukankan      html  css  js  c++  java
  • C++第四天学习

    回顾:
    1.初始化表
    2.this指针
    3.拷贝构造
    Test(const Test& rt)
    {
    //1.分配新空间
    //2.给新空间赋值
    }
    4.static成员
    类::函数();
    类型 类名::静态成员变量=0;

    ----------------------------------------
    1.友元 friend
    友元是对类的封装机制的一个补充。
    一个类可赋予 某些函数/类 访问它的私有成员的权限

    友元分为友元函数和友元类

    1.友元函数
    1.友元函数可以是普通的函数
    在类中声明友元函数的格式:
    friend 类型 函数名(参数表);
    2.友元函数可以是类的成员函数
    friend 类型 类名::函数名(参数表);

    类的前置声明:
    class 类名;

    2.友元类
    friend 类名;

    注:
    友元关系是单向的。
    友元关系是不可传递的。

    练习:求两点之间的距离。
    ex.cpp


    2.运算符重载
    cout << "hello c++";
    C++中函数可以重载,运算符也能够重载,运算符重载会赋予该运算符一种新的含义。

    class student
    {

    }

    (x,y)

    1 + 1 = 2
    1.1 + 2.2 = 3.3

    科学计算
    复数 :实部 虚部
    class Complex
    {
    public:
    Complex();

    private:
    double real;
    double img;
    };
    Complex c1,c2;
    c3 = c1 + c2;
    (1,2i)

    运算符重载是通过创建 运算符重载函数 来实现的。

    运算符重载函数:
    返回类型 operator运算符(参数表);
    如:
    int operator+(Complex ,Complex);

    运算符重载函数: 可以是类外定义的普通函数
    也可以是类的成员函数或友元函数
    运算符--->运算符函数:
    运算符函数代替了运算符,其中函数参数对应的是运算符的操作数,函数返回值对应运算符的运算结果。

    (重载输入运算符,输入一个点。)

    哑元:占位用的,只有类型,没有形参

    #include<iostream>
    using namespace std;


    class student
    {
    public:
    student(int n=0,string sn="zhangfei"):num(n),name(sn)
    {

    }
    friend void func(student );
    void show()
    {
    cout << num << endl;
    cout << name << endl;
    }
    private:
    int num;
    string name;
    };

    void func(student s)
    {

    cout << s.num << endl;
    cout << s.name << endl;
    }

    int main()
    {
    student s;
    func(s);
    return 0;
    }

    #include<iostream>
    using namespace std;

    class Girl;

    class Boy
    {
    public:
    Boy()
    {
    num = 123456;
    name = "zhaoyun";
    }
    void show(Girl& x);

    void show2(Girl& x);

    private:
    int num;
    string name;
    };


    class Girl
    {
    public:
    Girl()
    {
    num = 8888888;
    name = "xiaowei";
    }
    friend Boy;
    // friend void Boy::show(Girl&);
    private:
    int num;
    string name;
    };
    void Boy::show(Girl& x)
    {
    cout << x.num << endl;
    cout << x.name << endl;
    }

    void Boy::show2(Girl& x)
    {
    cout << x.num << endl;
    cout << x.name << endl;
    }

    int main()
    {
    Boy boy;
    Girl girl;
    boy.show(girl);
    boy.show2(girl);

    }

    #include<iostream>
    using namespace std;

    class Point
    {
    public:
    Point()
    {
    x = 0;
    y = 0;
    }
    void show()
    {
    cout << "(" << x << "," << y << ")" << endl;
    }
    private:
    int x;
    int y;
    };

    int main()
    {
    Point p;
    // cout << p << endl;
    // p.show();
    }

    #include<iostream>
    using namespace std;

    class Complex
    {
    public:
    Complex(double r=0,double i=0);
    void show();
    // friend Complex operator+(Complex&,Complex&);
    Complex operator+(Complex& c2);
    friend ostream& operator<<(ostream &o,Complex &c3);
    private:
    double real;
    double img;
    };

    Complex::Complex(double r,double i):real(r),img(i)
    {
    }

    void Complex::show()
    {
    cout << "("<< real << "," << img << "i)" << endl;
    }

    Complex Complex::operator+(Complex& c2)//成员函数
    {
    Complex c;
    c.real = c2.real + this->real;
    c.img = c2.img + this->img;
    return c;

    }
    /*
    Complex operator+(Complex &c1,Complex &c2)//友元函数
    {
    Complex c
    c.real = c1.real + c2.real;
    c.img = c1.img + c2.img;
    return c;
    }
    */

    ostream& operator<<(ostream &o,Complex &c3)
    {

    o << "(" << c3.real << "," << c3.img << "i)";
    return o;
    }

    int main()
    {
    Complex c1(1,1),c2(2,2);
    Complex c3;
    c3 = c1 + c2;// c3 operator+(c1,c2)
    // c1.operaor+(c2)
    // c3 = c1.operator+(c2);

    // c3.show();
    cout << c3 << endl;// ostream& operator<<(cout,c3)

    }

    #include<iostream>
    using namespace std;

    class Time
    {
    public:
    Time()
    {
    m = 0;
    s = 0;
    }
    void show()
    {
    cout << m << ":" << s << endl;
    }
    friend Time& operator++(Time&);

    friend Time operator++(Time&,int);
    private:
    int m;
    int s;
    };

    Time& operator++(Time& t)//前++
    {
    if(++t.s == 60)
    {
    t.s = 0;
    t.m++;
    }
    return t;
    }

    Time operator++(Time& t,int)//表示后++
    {
    Time temp = t;
    if(++t.s == 60)
    {
    t.s = 0;
    t.m++;
    }
    return temp;
    }
    int main()
    {
    Time t1;
    // ++(++t1);// t1 operator++(t1)

    // t1++;// t1 operator++(t1)
    cout << "------------------" << endl;
    // cout << t1++;
    // cout << t1;
    Time t2 = t1++;
    t2.show();
    t1.show();
    }

    #include<iostream>
    #include<cmath>
    using namespace std;

    class Point
    {
    public:
    Point()
    {
    x = 0;
    y = 0;
    }
    Point(int x,int y)
    {
    this->x = x;
    this->y = y;
    }
    int getX()
    {
    return x;
    }
    int getY()
    {
    return y;
    }
    void setX(int x)
    {
    this->x = x;
    }
    void setY(int y)
    {
    this->y = y;
    }
    friend double Dist(Point&,Point&);
    private:
    int x;
    int y;

    };
    //1.写一个函数求两点之间的距离
    //2.写一个类,实现求两个点之间的距离


    double Dist(Point &p1,Point &p2)
    {
    double dist = sqrt((p1.x-p2.x)*(p1.x-p2.x) + (p1.y-p2.y)*(p1.y-p2.y));
    return dist;
    }
    int main()
    {
    Point p1(0,3),p2(4,0);
    cout << "p1到p2之间的距离为:"<< Dist(p1,p2) << endl;

    }

  • 相关阅读:
    for else 使用方法
    random 模块常用方法总结
    CPU使用率高,top等命令查找不到使用CPU高的进程怎么办
    查看CPU核数方法
    PyCharm安装第三方库如Requests
    python-login
    Edit Distance
    redhat nginx随机启动脚本
    vue-cli脚手架build目录中的webpack.base.conf.js配置文件
    vue-cli脚手架build目录下utils.js工具配置文件详解
  • 原文地址:https://www.cnblogs.com/liudehao/p/5686082.html
Copyright © 2011-2022 走看看