C++知识总结--类

it2026-01-09  15

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); }; 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; } /* 申明时需要加上friend关键字,而在定义时不需要加friend关键字 */

 

重载<<

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

 

 

 

转载于:https://www.cnblogs.com/xiaokuang/p/4571715.html

最新回复(0)