您的位置:首页 > 编程语言 > C语言/C++

【C++再学习】【05】有关类的一些知识点整理

2014-04-16 17:30 309 查看
默认构造函数问题

      只有在没有自定义的任何构造函数的情况下,编译器才会提供默认构造函数,如果程序员有为类设计了构造函数,那么程序员也必须提供默认构造函数。如果不提供,像这种声明将会是非法的:Person ligang;

const成员函数问题

      注意如果类的成员函数不需要修改调用对象,那么就尽量将其设计成const成员函数,格式是在函数的最后加上const关键字,例如:

       char* Person::getName( ) const

this指针问题

      下边讲解一下this指针相关的问题,还是以上边这个函数为例,实际上在编译器处理类的成员函数时,会自动添加一个参数Person* const register this作为成员函数的第一个参数,所以上边这个函数的原型变成这样:

      char* Person::getName( Person* const register this) const

      来个应用:

      Person ligang;

      ligang.getName( );

      第二行调用成员函数编译器会编译成这样的形式Person::getName(&ligang );

      所以我们可以把this指针就看做是函数里的一个普通的参数,在每一个成员函数内部都可以直接使用,指向调用该成员函数的对象。

操作符重载问题

      1)首先需要在类声明中声明:Time operator+ ( const Time & t)const;

      2)其次在类实现中实现函数功能:

       Time Time::operator+ ( const Time & t)const

      {

       ......

      }

      上边这种方法是采用成员函数实现的,还有一种方法是采用友元函数来实现。不过有几个操作符只能通过成员函数的方式实现:赋值操作符=、函数调用操作符( )、下标操作符[ ]、箭头操作符->,下边用友元函数来重载+运算符。

      1)首先需要在类声明中声明:friend Time operator+ (const Time & t1, const Time & t2 );

      2)其次在类实现中实现函数功能(注意此时不需要关键字friend):

      Time operator+ (const Time & t1, const Time & t2 )

      {

      .....

      }

自定义类的类型转换问题

      1)内置的基本类型转换为自定义类类型:

      比如有一个跟重量有关的类Stonewt,主要用于表示重量,所以可以将一些整数或者浮点数转换为Stonewt对象,C++中采用具有相应参数的构造函数来完成此项功能。如果类提供了一个Stonewt (double t)这样的构造函数,那么就可以将double类型的转换为Stonewt,如可以这样用:

      Stonewt wt;

      wt = 20.5;

      执行wt = 20.5的过程实际上是这样的,程序使用上述构造函数Stonewt(double t)创建一个临时对象,然后将临时对象以赋值的方式赋值给wt对象。

      2)自定义类类型转换为内置的基本类型:

      还是上边的例子,现在想把一个Stonewt对象转换为double类型的值,在这种情况下,需要提供转换函数。首先需要在类中声明转换函数,这种函数没有返回类型没有参数,样子有点怪,例子:

      operator double ( )const;//将Stonewt对象转换为double类型

      然后在类定义中实现函数:Stonewt::double( )const{......}

      有了转换函数之后就可使用强制类型转换了,比如:

      Stonewt wt(222.2);

      double dd = double(wt);
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息