zoukankan      html  css  js  c++  java
  • C++_类入门2-使用类

    进一步探讨类的特征,重点是类设计技术,而不是通用原理。一些特性很容易,一些特性很微妙。

    运算符重载

           目的是使C++操作更美观,更接近于内置类型的操作。

           隐藏了内部的实现机理,并强调了实质。

           格式:operator + ()

    ==========================================

    计算时间:一个运算符重载的示例

    ==========================================

    友元

           C++类的私有数据成员的访问只能通过类公有成员函数,这种访问方式限制太严格,有时候不需要另一种访问类私有数据成员的方式。

           友元:友元函数不是类的成员函数,但是能够访问类的私有数据成员。

           之前有个矛盾就是规定非成员函数不能直接访问类的私有数据,但是这会儿却可以,但那只是针对常规非成员函数而言,特殊的非成员函数就可以访问类的私有数据——友元函数

           创建友元: 必须将其原型声明放在类声明中,并且在原型声明前加上关键字friend;[j周3] 

           例:friend Time operator* (double m, const Time & t);

           友元函数就是这么特殊,虽然在类中声明,却不是类的成员函数,这是因为加了前缀friend。

           编写函数定义:不需要加friend。

     

           友元的理念是否有悖于OOP:

                  可以把友元看成与类方法一样都是表达类接口的一种方式。

     

           友元的作用:可以用它来反转操作数的顺序;

                  之前类重载运算符,必须将非类项放在运算符后面,运算符左边的操作数必须是类对象,右边的是其他数;有顺序要求,不能随便调。

                  Time = Time +1.1 //Time是类

                  但是写成 Time =1.1 +Time //就不行

    ==========================================

    重载运算符:作为成员函数还是非成员函数

    ========================================== 

    再谈重载:一个矢量类

    ========================================== 

    类的自动转换和强制类型转换

           类型转换包括:强制类型转换和自动类型转换;

           要考虑兼容性,不能会报错;C++语言不支持自动转换不兼容的类型;

     

           类的构造函数,可以将某种类型-->类的类型;

           Stonewt MyCat;

           MyCat =19.6;   //如果构造函数加了explicit,则无法自动转换,explicit用于关闭自动转换特性。如果没有加explicit,则会进行自动转换,自动过程是使用构造函数Stonewt(double)创建一个临时的Stonewt对象,然后将19.6作为初始化值。采用逐成员赋值的方法将该临时对象的内容复制到myCat中。隐式转换。

           Mycat =Stonewt(19.6);  //如果有explicit,用这种格式也可转换;

           Mycat =(Stonewt)19.6;

    //注意,只接受一个参数的构造函数才能成为转换函数。如果构造函数有两个参数,就不能用于类型转换。

           class Stonewt

    {

    private:

           enum{Lbs_per_stn = 14};

           int stone;

           double pds_left;

           double pounds;

    public:

           Stonewt(double lbs);

           Stonewt(int stn, double lbs);

           Stonewt();

           ~ Stonewt();

     

    }

    转换函数

           将类转换成其他类型;

           Stonewt wolfe(285.7);

           double host = wolfe;

           可以这样做,但是不能使用构造函数,构造函数只适合用于将其他类型转换成类的类型。

           要使用特殊的C++运算符函数——转换函数

           转换函数也是类的成员函数,

           特点:

                  转换函数必须是类方法;

                  转换函数不能指定返回类型;

                  转换函数不能有参数;

     

           class Stonewt

    {

    private:

           enum{Lbs_per_stn = 14};

           int stone;

           double pds_left;

           double pounds;

    public:

           Stonewt(double lbs);

           Stonewt(int stn, double lbs);

           Stonewt();

           ~ Stonewt();

           operator int() const;  //转换函数

           operator double() const;  //转换函数

     

    }

     

    Stonewt::operator int() const

    {

           return int (pounds + 0.5);

    }

     

    Stonewt::operator double() const

    {

           return pounds;

    }

     

    转换函数和友元函数

    ==========================================

    总结

    类型转换

    友元函数

    运算符重载

     

  • 相关阅读:
    Unknown column '××' in 'where clause',出现这个问题,如何处理?
    mysql 安装失败 start service执行不下去
    2019第十届蓝桥杯国赛总结
    Win10中小娜无法搜索本地应用
    计蒜客 青出于蓝胜于蓝(dfs序+树状数组)
    计蒜客 棋子等级
    蓝桥杯 国王的烦恼(并查集)
    keras+theano+tensorflow+darknet
    caffe with anaconda
    matconvnet编译
  • 原文地址:https://www.cnblogs.com/grooovvve/p/10467657.html
Copyright © 2011-2022 走看看