day06 静态成员、成员指针、操作符重载

来源:互联网 发布:unity3d资源包 编辑:程序博客网 时间:2024/05/19 06:35
回顾:
1 构造函数初始化表
2 this指针
3 常函数(常成员函数),mutable关键字
4 析构函数
========
十七 拷贝构造和拷贝赋值
1 浅拷贝和深拷贝问题
2 ...
=========
3 类的缺省拷贝赋值和缺省的拷贝构造一样,是浅拷贝。为了得到深拷贝的效果,必须自己定义拷贝赋值运算符函数
类名& operator=(const 类型& that){
   if(this != &that){//防止自赋值
    //分配新内存
    //释放旧内存
    //拷贝数据到新内存
   }
   return *this;//返回自引用
}
 
练习:为Integer类增加深拷贝赋值实现
 
=========================================
十八 静态成员
1 静态成员变量
语法:
  class 类名{
     static 数据类型 变量名;//声明
  };
  数据类型 类名::变量名 = 初值;//定义和初始化
 
1)非静态成员变量是属于对象,但是静态成员变量不对象对象。
2)不能在构造函数中定义和初始化,需要在类的外部单独的定义和初始化。
3)静态成员变量和全局变量类似放在全局区
4)静态成员变量访问作用域被限制在类中,可以通过类名去访问,也可以通过对象去访问。
  类名::静态成员变量名
  对象名.静态成员变量名
5)静态成员使用受到访问控制属性影响。
 
2 静态成员函数
class 类名{
   static 返回类型 函数名(形参表){...}
};
1)可以通过"类名::"去访问,也可以通过对象访问
2)静态成员函数没有this指针,也没有常属性
 
注:在静态成员函数中只能访问静态成员,非静态成员函数中既可以访问静态成员也可以访问非静态成员。
 
//笔试题:什么叫做单例模式,简述创建方式
3 单例模式
一个类只允许存在唯一的对象实例。
1)禁止在外部创建对象:私有化构造函数
2)类的内部维护唯一的对象:静态成员变量
3)提供访问单例对象方法:静态成员函数
 
4)创建两种方法:
   --》饿汉式:无论用于不用,在程序启动即创建
   --》懒汉式:用的时候再创建,不用即销毁
 
 
十九 成员指针(了解)
1 成员变量指针
1)语法
   类型  类名::*成员指针名 = &类名::成员变量;   
   class Student{string name};
   Student s;
   string* p = &s.name;//普通指针
 
   //定义成员变量指针
   string Student::*pname = &Student::name;
2)使用
   对象.*成员指针名;
   s.*pname;//s.name
   ".*":成员指针解引用运算符
 
   对象指针->*成员指针名;
   Student ps = &s;
   ps->*panme;//ps->name;
   "->*":间接成员指针解引用运算符
 
注:成员变量指针的本质就是类中特定成员变量在对象中的相对地址。
 
2 成员函数指针
1)语法
   返回类型 (类名::*成员函数指针)(形参表)  
                     = &类名::成员函数名;
2)使用
   (对象.*成员函数指针)(实参表)
   (对象指针->*成员函数指针)(实参表)
 
二十 操作符重载
eg:复数  
    (3+4i) + (1+3i) = (4+7i);
1 双目操作符重载 L#R
1.1 运算类双目操作符:+ - * / ...
1)左右操作数可以是左值也可以是右值
2)表达式的值是一个右值
 
L#R的表达式会被编译器处理为L.operator#(R)的成员函数调用形式,该函数的返回值就是表达式值;
eg:
c1 + c2 = c1.operator+(c2);
 
 
1.2 赋值类的双目操作符: = += -= ...
 
练习:复习string类实现,单例模式...


阅读全文
0 0
原创粉丝点击