C++之类的static成员
类的成员类型
类的成员有以下几种类型:数据成员、函数成员、类类型成员。
数据成员:数据成员就是一个类中定义的一些变量,用来形容类的特性、特征。如:
上面中Hunam类有三个成员:sex、age、tall。用来形容这个类Hunam的特性。class Human{ public: string sex ; //性别 int age; //年龄 int tall; //身高 };
函数成员:函数成员就是类中用来执行一些操作以便修改或者获取类的数据成员(特性)。如:
<pre name="code" class="cpp">//获取性别特性 string getSex(){ return sex; } //修改性别特性 void setSex(string sex){ sex = sex; }
<pre name="code" class="cpp">上面就是函数成员getSex()与setSex()用来获取、修改数据成员属性。
类类型成员:类中可以包含其它类类型的成员。如:
class Per{ public: int age; string name; }; class Human{ public: string sex ; int age; int tall; //Per类型的成员 Per per; //获取性别特性 string getSex(){ return sex; } //修改性别特性 void setSex(string sex){ sex = sex; } };
类成员的static修饰
上面示例的static修饰:
数据成员:
class Human{ public: static string sex ; //性别 static int age; //年龄 static int tall; //身高 };
函数成员
//获取性别特性 static string getSex(){ return sex; } //修改性别特性 static void setSex(string sex){ sex = sex; }
类类型的成员://Per类型的成员 static Per per;
static修饰符应该注意的一些问题:
static修饰符说明这个成员不属于类的对象,但是属于类;换句话说就是,static修饰的成员与类有联系,但是并不属于类的实例对象。
如下可以证明:
class Test{ static int a; int b; float c; }; std::cout << sizeof (Test) << std::endl; //这里看出了Test的大小为8个字节,为什么不是12个字节?因为static int a不属于Test类。
因为static成员不属于类,因此static修饰符不能用const连用:原因:static不属于类,而const修饰符说明此成员函数不能修改此类型对象的数据成员,既然static成员不属于类,自然也就不能修改类对象的数据成员了。
因为static成员不属于类,因此static修饰符不能用virtual连用:
原因:static成员不属于类,但是virtual函数成员属于类,因此static不能与virtual连用
因为static成员不属于类,因此static修饰符不能用friend连用:
原因:friend成员因为不属于类,相当于一个全局的成员,而static成员不属于类,所以根本上就没有必要friend与static连用。