C++面对对象程序设计第二节

静态成员和静态成员函数

  1. 定义与java相同,这里只讨论其独特性质
  2. 静态成员函数访问的四种方式

    • 类名+成员名

      A :: Print();
    • 对象名.成员名

      A m;
      m.Print();
    • 指针->成员名

      A *p;
      p->Print();
    • 引用

      A &p;
      p.Print();
  3. 静态成员变量本质是全局变量

  4. 静态成员变量必须在定义的文件中对其进行初始化或赋值,否则编译通过,链接不通过。

    class A{
    static int m ;
    };
    int A :: m = 0 ; //赋值
  5. 静态成员函数内可以以访问非静态成员函数以及非静态变量

成员对象与友元类

  1. 成员对象:第一个类的成员变量是另一个类的对象
  2. 包含对象的类叫做封闭类
  3. 封闭类的构造函数形式
    类名+构造函数(参数表):成员变量(参数表),成员变量2(参数表)…

     //成员对象与封闭类
    class examples
    {
    public:
    example a ;
    int b ;
    int c ;
    int e ;
    examples(int m ,int n) : a(m-n,m+n,m*n),e(m){};
    };
    //使用
    examples p (1,2);
  4. 对于封闭类构造与析构顺序
    成员对象:先构造后析构
    封闭对象:后构造先析构

友元类

  1. 友元函数
    • 友元函数可以访问类的私有成员
    • 将一个类的成员函数定义为另一个友元
  2. 友元类
    A是B的友元类,A的成员函数可以访问B的私有成员

    class B{
    private:
    int a ;
    friend class A ;
    };
    class A{
    B m ;
    void Print()
    {
    cout << m.a << endl ;
    }
    };
  3. 友元类不能传递,不能继承

this 指针

  1. 非静态成员函数中可以直接使用this指针,代表指针该函数体用的对象指针

    class A{
    int i ;
    public:
    void Hello {cout << "hello" << endl;}
    //等价于 void Hello (A*this) {cout << "hello" << endl;}
    };

    int main()
    {
    A* p = NULL;
    p->Hello(); //输出Hello
    }
  2. this函数不能作用静态变量以及全局变量。可以作用与const变量

常量成员函数

  1. 定义方法

    class A
    {
    void Print(const a) const { cout << endl ;}
    };
  2. 常量成员不能调用非常量成员函数

  3. 常量成员函数不能调用非常量成员变量

谢谢访问