码迷,mamicode.com
首页 > 编程语言 > 详细

C++知识总结--类

时间:2015-06-12 17:00:15      阅读:150      评论:0      收藏:0      [点我收藏+]

标签:

1. 类的成员访问控制

类的成员三种访问类型:public,private,protected(默认为private

while, 结构体的默认访问类型为public

 

2.  const成员函数

class A { 

public: 

  void func ( ) const;  /* promise not to change invoking object */

};

void A::func( ) const {

  ...

}

const A a;  /* a is constant object */

类的const对象只能调用类的const成员函数

 

3. 操作符重载

操作符左侧的对象是调用对象,操作符右侧的对象是作为参数被传递的对象

class Time {
private:
    int hours;
    int minutes;
public:
    Time operator+ (const Time &t) const;
};
Time Time::
operator+(const Time &t) const {   Time sum;   sum.minutes = minutes + t.minutes;   sum.hours = hours + t.hours + sum.minutes / 60;   sum.minutes = sum.minutes % 60;   return sum; }

int main() {
  Time a;
  Time b;
  Time total;

  total = a + b;
}

不能重载的操作符:

sizeof

成员操作符"."

成员指针操作符"*"

"::"

"?:"

typeid

const_cast

static_cast

dynamic_cast

reinterpret_cast

大多数操作符都可以通过成员函数或者非成员函数进行重载,但下面的操作只能重载为成员函数

=   赋值操作符

()   函数调用操作符

[]  下标操作符

-> 通过指针访问成员的操作符

 

4. 友元

为啥要友元:举个栗子

class Time {
private:
    int hours;
    int minutes;
public:
    Time operator* (double m) const;
};

这样重载的*在调用时操作符左侧必须是类对象,自然地会改写为
Time operator*(double m, const Time &t);
使用非成员函数可以按照所需的顺序获得操作数,但是非成员函数不能访问类的私有数据
而通过让函数成为类的友元,可以赋予函数与类的成员函数相同的访问权限。

class Time {
private:
    int hours;
    int minutes;
public:
    friend Time operator* (double m, const Time &t);
};

 /* 在定义时不需要加friend关键字 */
Time operator*(double m, const Time &t) {
  Time result;
  result.minutes = t.hours * m * 60 + t.minutes * 60;
  result.hours = result.minutes / 60;
  result.minutes = result.minutes % 60;
  return result;
}

 

重载<<

void operator<<(ostream &os, const Time &t);  /* 不能拼接输出,cout<<"haha"<<t<<endl; 是不能工作的 */
ostream& operator<<(ostream &os, const Time &t);

 

 

 

C++知识总结--类

标签:

原文地址:http://www.cnblogs.com/xiaokuang/p/4571715.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!