美文网首页
c++类的特殊成员函数

c++类的特殊成员函数

作者: i_Eloise | 来源:发表于2018-01-18 09:16 被阅读0次

    1.构造函数

    函数名为类名,并且无返回值
    可以有默认的构造函数
    但是如果定义了非默认构造函数,就一定要写出默认构造函数(即使默认构造函数不做任何事情),除非非默认构造函数的所有参数都有默认值

    2.析构函数

    函数名为类名前面加~,并且无返回值,析构函数也没有参数。由系统在合适的时候调用。
    可以有默认析构函数
    如果构造函数里面用了new,析构函数里面要使用delete;构造函数里面用了new []。析构函数里面就要用delete[]

    3.复制构造函数

    Class_name(const Class_name &);
    新建一个对象,并且将其初始化为同类现有对象时,复制狗仔函数将被调用。

    StringBad ditto(motto);
    StringBad ditto = motto;
    StringBad ditto = StringBad(motto);
    StringBad *pditto = new StringBad(motto); 
    

    4.赋值运算符

    类的重载 类的自动转换与强制类型转换 转换函数

    • 类的重载:可以通过成员函数进行重载,也可以通过友元函数进行重载
      运算符重载:
      格式:operatorop (argument list)
      通过成员函数进行函数重载的例子: Time operator+ (const Time &t) const;
      通过友元函数进行函数重载的例子: friend Time operator*(double t, const Time &t);

    只能通过成员函数进行重载:
    = 赋值运算符
    () 函数调用运算符
    [] 下标运算符
    ->通过指针访问类成员的运算符

    • 类的自动转换与强制类型转换:

    可以将类定义成与基本类型或者另一个类相关。使得从一个类型转换为另一种类型是有意义的。在这种情况下,程序员可以指示c++如果和自动进行转换,或者通过强制类型转换完成。

    例子:

    Stonewt::Stonewt(double lbs)
    {
      store = stn;
      pds_left = lbs;
      pounds = stn * Lbs_per_stn +lbs; 
    }
    Stonewt myCat;
    myCat = 19.6; 
    

    myCat = 19.6 使用Stonewt(double) 创建一个临时的Stonewt对象,并将19.6作为初始化值,然后采用逐成员复制方式将临时对象的内容复制到myCat中;这里使用的是隐式转换

    只有接收一个参数的构造函数才能作为转换函数,如果构造函数有i两个参数。而第二个参数没有提供默认值,则它不可以用作转换函数

    explicit Stonewt(double lbs) 关闭隐式转换,只能使用强制类型转换。
    Stonewt myCat;
    myCat = 19.6;//not valid
    myCat = Stonewt(19,6);//valid
    
    • 转换函数:
      可以用类的自动转换或者强制类型转换把数字转换为Stonewt对象,也可以把Stonewt对象转换为double值。
      构造函数只用于从某种类型到类类型的转换。要进行相反的转换。必须使用特殊的C++运算符函数--转换函数。
      例如:
    Stonewt wolfe(285.7);
    double host = double(wolfe);
    double host = wolfe;//implicit use of conversion function
    

    最后一句语句中,编译器发现,右侧是Stonewt类型,而左侧是double类型,因此它将查看程序员是否定义了与此匹配的转换函数(如果没有找到这样的定义,编译器将生成错误消息,指出无法将Stonewt赋给double)

    创建转换函数:operator typeName();
    转换函数是类方法,不能指定返回类型,不能有参数。
    例如:operator double() 可以在前面加explicit,这样就只能使用显示转换,避免错误。

    5.地址运算符:

    this

    相关文章

      网友评论

          本文标题:c++类的特殊成员函数

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