普通成员变量
用初始化列表或者构造函数中赋值
普通成员常量和引用型变量
用初始化列表初始化
静态成员变量
用类内声明,类外初始化
静态成员常量
当且仅当const、static、且为integer类型,可以直接类内初始化; 其余类型同样是类内声明,类外初始化
示例
A.h
#ifndef A_H
#define A_H
class A
{
public:
virtual ~A();
A(int p1,int p2,int p3):a(p1),b(p2),c(p3){};
void Print();
private:
int a;
int &b;
const int c;
static int d;
static const int e=60;
static const float f;
};
#endif
A.cpp
#include "A.h"
#include<iostream>
int A::d = 1000;
const float A::f = 90.9;
void A::Print(){
std::cout<<a<<","<<b<<","<<c<<","<<d<<","<<e<<","<<f<<std::endl;
}
A::~A()
{
}
MAIN.cpp
#include <iostream>
#include "A.h"
using namespace std;
int main(){
A a(21,22,23);
a.Print();
return 0;
}
为什么静态的就要类外初始化?
因为类内初始化会导致每个对象包含该静态成员,与静态变量属于类不属于对象相矛盾。
这里赋值和初始化有什么不同?
初始化是在分配空间时为对象赋值,赋值则是在空间分配完毕之后,在进行普通的赋值操作。
|