c++基础知识学习---第四天

本片博客是作者在学习c++的过程中的笔记记录,希望和各位读者一起学习交流

静态成员变量成员函数

  1. 静态成员变量
    1. 定义静态成员变量
      关键字static可以用于说明一个类的成员,静态成员提供了一个同类对象的共享机制
      把一个类的成员说明为static时,这个类无论有多少个对象被创建,这些对象共享这个static成员
      静态成员属于类,它不是对象成员
      用法:
         在这里插入图片描述
    2. 使用静态成员变量
      当静态成员变量是public属性的时候,可以使用类名或者对象来直接调用,类调用的时候时要用“::”来调用,对象调用的时候要用“.”来调用
      当静态成员变量是private属性的时候,只能通过对象调用相应的成员函数来使用
  2. 静态成员函数
    1. 概念
      静态成员函数用关键字staic进行修饰
      在类外调用静态成员函数的时候,用“类名::”做限定词或者通过对象进行调用
    2. 在静态成员函数中能使用静态成员变量,但是不能使用普通成员变量。
      原因:如果在静态成员函数中使用普通变量的话,那样就不能确定这个普通变量属于哪个对象,因此会发生错误

C++面向对象模型初探

  1. c++对象模型可以概括为两部分:
    1. 语言中直接支持面向对象程序设计的部分,主要涉及如构造函数、析构函数、虚函数、继承(单继承、多继承、虚继承)、多态等。
    2. 对于各种支持的底层实现机制
      在c语言中,“数据”和“处理数据的操作(函数)”是分开来声明的,也就是说,语言本身并没有支持“数据和函数”之间的关联性。在c++中,通过抽象数据类型(abstract data type,ADT),在类中定义数据和函数,来实现数据和函数的绑定

    概括的说,c++类中有两种成员数据:static、nonstatic;三种成员函数:static、nonstaitc、virtual

  1. 编译器对属性和方法的处理机制
    c++类中的成员变量和成员函数是分开存储的

    1. 成员变量:
      普通成员变量:存储于对象中,与struct变量有相同的内存布局和字节对齐方式
      静态成员函数:存储于全局数据区中

    2. 成员函数:
      存储于代码段中

    3. 总结:
      c++类对象中的成员变量和成员函数是分开存储的
      c++中类的普通成员函数都隐式包含一个指向当前对象的this指针
      静态成员函数不包括指向具体对象的指针,普通成员函数包括一个指向具体对象的指针

  2. this指针
    this指针是指向对象自己本身的一个指针
    若方法的形参的名字和对象的属性的名字相同,则通过this指针来解决

  3. const的修饰
    eg:class Test{
       public:
        void ope(int a)const
       {
         ;
        }
       private:
         int m_a;
       };
    这里的const修饰的是this指针指向的内存空间,表示this指针指向的内存空间不能进行修改,this指针本省就是不可以进行修改的,因为this指针的类型是:Test * const ,说明this指针是一个常指针。

  4. 全局函数PK成员函数

    1. 全局函数转化成成员函数,通过this指针隐藏左操作数
      Test add(Test &t1,Test &t2)===》》》 Test add(Test &t2)
    2. 成员函数转换成全局函数,多一个参数
      void print()===》》》void add(Test *pthis)
    3. 函数返回元素和返回引用
      函数返回引用是返回对象本身,即*this
        Test &add(Test &t2);
      返回返回元素是返回一个匿名对象
        Test add(Test &t2);

友元函数、友元类

  1. 友元函数(破坏了类的封装性)
    1. 类中通过使用关键字friend 来修饰友元函数,但该函数并不是类的成员函数,其声明可以放在类的私有部分,也可放在共有部分。友元函数的定义在类体外实现,不需要加类限定
    2. 一个类中的成员函数可以是另外一个类的友元函数,而且一个函数可以是多个类友元函数
    3. 友元函数可以访问类中的私有成员和其他数据,但是访问不可直接使用数据成员,需要通过对对象进行引用
    4. 友元函数在调用上同一般函数一样,不必通过对对象进行引用

    格式:
      friend 类型 函数名(形式参数);

  1. 友元类
    1. 友元类的所有成员函数都是另一个类的友元函数,都可以访问另一个类中的隐藏信息(包括私有成员和保护成员)
    2. 当希望一个类可以存取另一个类的私有成员时,可以将该类声明为另一类的友元类

    格式:
       friend class 类名;

下面的是笔者的微信公众号,欢迎关注,会持续更新c++、python、tensorflow、机器学习、深度学习等系列文章

                      在这里插入图片描述

发布了38 篇原创文章 · 获赞 49 · 访问量 6944

猜你喜欢

转载自blog.csdn.net/Xiao_Jie123/article/details/104184819