C++的静态成员变量和静态成员函数详解
2015-08-04 10:26
239 查看
1、静态成员变量在使用前必须初始化,且初始化必须是在类外。
2、静态成员函数不能调用类的非静态成员变量:
因为静态成员函数和静态成员变量在类的实例化之前就已经分配了一块内存,已经被初始化了。而非静态成员变量在类的实例化的时候才被初始化。
如果静态成员函数调用非静态成员变量就相当于,调用了一个没有定义的变量,导致错误。
3、非静态成员函数可以调用静态成员变量
4、通过类名不可以调用类的非静态成员函数。
[code]#include <iostream> using namespace std; class CStudent { private: static int m_nsCount; public: /* 构造函数 */ CStudent() { m_nsCount++; } static void displayCount() { cout << "m_nCount = " << m_nsCount << endl; } }; int CStudent::m_nsCount = 0; int main() { CStudent stu1; stu1.displayCount(); }
2、静态成员函数不能调用类的非静态成员变量:
因为静态成员函数和静态成员变量在类的实例化之前就已经分配了一块内存,已经被初始化了。而非静态成员变量在类的实例化的时候才被初始化。
如果静态成员函数调用非静态成员变量就相当于,调用了一个没有定义的变量,导致错误。
[code]#include <iostream> using namespace std; class CStudent { private: static int m_nsCount; //静态成员变量 int m_nData; //非静态成员变量 public: /* 构造函数 */ CStudent() { m_nData = 0; m_nsCount++; } static void displayCount() { cout << "m_nsCount = " << m_nsCount << endl; cout << "m_nCount = " << m_nData << endl; //错误 } }; int CStudent::m_nsCount = 0;//一定要在类外初始化 int main() { CStudent stu1; stu1.displayCount(); }
3、非静态成员函数可以调用静态成员变量
[code]#include <iostream> using namespace std; class CStudent { private: static int m_nsCount; //静态成员变量 int m_nData; //非静态成员变量 public: /* 构造函数 */ CStudent() { m_nData = 0; m_nsCount++; } /* 非静态成员函数调用静态成员变量 */ void addCount() { m_nsCount++; //正确 } }; int CStudent::m_nsCount = 0;//一定要在类外初始化 int main() { CStudent stu1; stu1.addCount(); }
4、通过类名不可以调用类的非静态成员函数。
[code]#include <iostream> using namespace std; class CStudent { private: static int m_nsCount; //静态成员变量 int m_nData; //非静态成员变量 public: /* 构造函数 */ CStudent() { m_nData = 0; m_nsCount++; } static void displayCount() { cout << "m_nsCount = " << m_nsCount << endl; } void addCount() { m_nsCount++; //正确 } }; int CStudent::m_nsCount = 0;//一定要在类外初始化 int main() { CStudent::addCount();//,错误类名不可以调用非静态成员函数 CStudent::displayCount(); }
相关文章推荐
- windows 多线程
- c++中vector容器的用法
- C++ map的使用
- 用C++将China译成密码
- 关于C语言中二级指针的理解
- C语言和C++的区别与对比
- 学习《Visual+C++/Turbo+C串口通信编程实践》第一章 MFC控件MSCOMM
- 关于c++中getline(cin,str)在cin之后使用
- c++ 指针
- C/C++ Prime学习要点1——实现memcpy库函数
- oj 中G++和C++区别
- C语言文件操作
- C++实现简单的职工信息管理系统
- C++、 C 中的结构体、联合和枚举 异同
- 设计模式C++学习笔记之十九(State状态模式)
- 设计模式C++学习笔记之十八(Visitor访问者模式)
- 设计模式C++学习笔记之十七(Chain of Responsibility责任链模式)
- 设计模式C++学习笔记之十六(Observer观察者模式)
- 设计模式C++学习笔记之十五(Composite组合模式)
- 设计模式C++学习笔记之十四(Iterator迭代器模式)