美文网首页
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++]构造和析构函数

    什么是构造函数定义C++中的类可以定义与类名相同的特殊成员函数,这种与类名相同的成员函数叫做构造函数.C++对类提...

  • C++基础构造函数(constructor)

    构造函数定义 C++中的类可以定义与类名相同的特殊成员函数,这种与类名相同的成员函数叫做构造函数,构造函数在定义时...

  • C++ 构造函数,类的成员变量

    c++ 05 构造函数无参构造函数有参构造函数 拷贝构造函数 浅拷贝 深拷贝 类的成员变量 四类特殊的成员变量

  • C++11标准中的 deleted 函数

    Deleted 函数 背景问题 对于 C++ 的类,如果程序员没有为其定义特殊成员函数,那么在需要用到某个特殊成员...

  • 1.2.04_C++ 类构造函数 & 析构函数

    C++ 类 & 对象 类的构造函数 类的构造函数是类的一种特殊的成员函数,它会在每次创建类的新对象时执行。 构造函...

  • c++类的特殊成员函数

    1.构造函数 函数名为类名,并且无返回值可以有默认的构造函数但是如果定义了非默认构造函数,就一定要写出默认构造函数...

  • C++语言基础(1):类型转换

    相关章节 「C++类的特殊成员函数(1):构造函数」中“3 隐式类类型转换” 考虑下面的例子: 在计算ival的值...

  • 第十章 对象和类(3)类的构造函数和析构函数

    (三)类的构造函数和析构函数 c++提供了一种特殊的成员函数,称为类构造函数,专门用于构造新对象,将值赋值给它的...

  • c++构造函数

    构造函数 引入 在c++的类中,构造函数是一种特殊的成员函数,在每次创建创建一个类的时候会默认调用构造函数进行初始...

  • 类&对象(一)

    C++成员函数 类的成员函数是指那些把定义和原型写在类定义内部的函数,就像类定义中的其他变量一样。类成员函数是类的...

网友评论

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

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