欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

第三章 类与对象进阶

程序员文章站 2022-06-24 12:58:09
[TOC] this指针 1. 定义: 非静态 成员函数指向调用该函数的对象的指针 2. 非静态 成员函数隐含 指针参数 3. 静态成员函数不针对某个对象,所以不包含this指针 静态成员变量&函数 1. 静态成员变量&静态成员函数本质上是全局变量,与该类有关,但不与调用它的对象直接相关 2. 即使 ......

目录

this指针

  1. **定义: ** 非静态成员函数指向调用该函数的对象的指针
  2. 非静态成员函数隐含this指针参数
  3. 静态成员函数不针对某个对象,所以不包含this指针

静态成员变量&函数

  1. 静态成员变量&静态成员函数本质上是全局变量,与该类有关,但不与调用它的对象直接相关

  2. 即使没有创建对象,静态成员也存在,被所有对象共享

  3. 调用方法

    • 类名::静态成员名
    • 对象.静态成员
    • 对象指针->静态成员
    • 对象引用.静态成员
  4. 静态变量必须声明或初始化,否则链接时会报错

  5. 静态成员函数内不可使用非静态成员变量及非静态成员函数

    #include <iostream>
    using namespace std;
    class rectangle{
    	private:
    		int w,h;
    		static int totalarea,totalnum;
    	public:
    		rectangle(int w_,int h_):w(w_),h(h_){
    			totalnum++;
    			totalarea+=w*h;
    		}
    		rectangle(rectangle &r){
    			w=r.w;
    			h=r.h;
    			totalnum++;
    			totalarea+=w*h;
    		}
    		~rectangle(){
    			totalnum--;
    			totalarea-=w*h;
    		}
    		static void printtotal(){
    			cout<<totalnum<<", "<<totalarea<<endl;
    		}
    };
    int rectangle::totalnum;  //必须对类的静态变量进行声明或初始化,
    int rectangle::totalarea; //否则链接不通过 
    int main(){
    	rectangle a(2,2),b(4,5);
    	rectangle::printtotal();
    	a.printtotal(); //结果与对象a无关 
    	return 0;
    }
    

成员对象与封闭类

  1. 封闭类:包含成员对象(类)的类
  2. 初始化顺序:成员对象先构造,然后才是封闭类;成员对象构造顺序依照封闭类中成员对象声明顺序
  3. 析构顺序:封闭类先析构,然后是成员对象

常量成员对象&常量成员函数

  1. 常量成员对象:成员对象前面加const关键字,初始化后便不能改变值

  2. 常量对象只能调用常量成员函数

  3. 常量成员函数:成员函数后面加上const关键字,保证调用对象值在函数中不会被改变

  4. 常量成员函数内不能改变成员变量值(静态成员对象除外),不能调用同类非常量成员函数 (静态成员函数除外)

  5. 常引用:保证引用参数在函数运行中值不被改变

    void func(const stu &a)const{}
    

友元

  1. 分类: 友元函数、友元类
  2. 友元不属于对象成员,但能够访问对象的私有private成员&保护protected成员
  3. 友元关系不能传递,不能继承

  1. 因为封闭类构造时可能用到成员对象

  2. 先构造的后析构

  3. 因为非常量成员函数可能改变成员变量值

  4. 不能传递指:如果a是b的友元,b是c的友元,不能推导出a是c的友元