1、通过类的对象调用类的成员函数。
不同文件之间调用函数:(A中调用B中的函数)
B中线程加锁获得当前实例的引用。
.h: public :static 类名 &getInstance();
.cpp:
类名 & 类名::getInstance() { static Configuration *pointer = NULL; if (pointer == NULL) { static pthread_mutex_t mutex = PTHREAD_MUTEX_INITIALIZER; pthread_mutex_lock(&mutex); if (pointer == NULL) { static Configuration instance; pointer = &instance; } pthread_mutex_unlock(&mutex); } return *pointer; }
A中包含B的头文件,然后:作用域::getInstance.要调用的函数即可。
2、静态的成员函数只能使用类的静态变量。
C++规定const静态类成员可以直接初始化,其他非const的静态类成员需要在类声明以外初始化。
类的静态变量是属于整个类的,是所有对象共有的。
不能通过类名来调用类的非静态成员函数。
通过类的对象调用静态成员函数和非静态成员函数
静态成员函数中不能引用非静态成员。(因为静态成员函数属于整个类,在类实例化对象之前就已经分配空间了,而类的非静态成员必须在类实例化对象后才有内存空间,所以这个调用就出错了,就好比没有声明一个变量却提前使用它一样。)
类的非静态成员函数可以调用用静态成员函数,但反之不能。
不要试图在头文件中定义(初始化)静态数据成员。在大多数的情况下,这样做会引起重复定义这样的错误。即使加上#ifndef #define #endif或者#pragma once也不行。
类的静态成员变量在使用前必须先初始化。(返回类型 作用类::静态变量名 = value)(否则会说该变量没有定义)
(如果出现普通变量显示没有定义,则是因为他缺少类型定义的头文件)eg:ssize_t需要包含头文件:#include<cstddef>
3、const成员函数 (void add(int)const)(对类的数据成员不可以修改)。
1)const成员函数可以访问非const对象的非const数据成员、const数据成员,也可以访问const对象内的所有数据成员;
2)非const成员函数可以访问非const对象的非const数据成员、const数据成员,但不可以访问const对象的任意数据成员;
3)作为一种良好的编程风格,在声明一个成员函数时,若该成员函数并不对数据成员进行修改操作,应尽可能将该成员函数声明为const 成员函数。
4、静态成员函数不可以同时声明为 virtual、const、volatile函数。
5、类成员的初始化
首先为类中的静态变量分配空间,并对内存进行置0;初始化静态变量执行 静态代码块中的语句 ;类变量的初始化完成后。执行main中对象的创建。
6、如果一个头文件要被其他文件所引用,应避免在该文件中声明普通变量,或者声明的同时初始化变量。
常量在定义的时候初始化,之后便不可更改。