#includeusing namespace std; class tr { public: tr(int n) { i = n; } void set_i(int n) { i = n; } int get_i() { return i; } private: int i; }; void sqr_it(tr ob) { ob.set_i(ob.get_i() * ob.get_i()); cout << "在函数sqr_it内,形参对象ob的数据成员i的值为:" << ob.get_i(); cout << endl; } int main() { tr obj(10); cout << "调用函数sqr_it前,实参对象obj的数据成员i的值为:"; cout << obj.get_i() << endl; sqr_it(obj); cout << "调用函数sqr_it后,实参对象obj的数据成员i的值为:"; cout << obj.get_i() << endl; return 0; }
#includeusing namespace std; class ctest { static int count; public: ctest() { ++count; cout << "对象数量=" << count << 'n'; } }; int ctest::count = 0; int main(void) { ctest a[3]; return 0; }
#includeusing namespace std; class student { static float m_classmoney; public: void initstudent(char nametemp[]) { for (int count = 0; count < 10; count++) { name[count] = nametemp[count]; } } void expendmoney(float moneytemp) { money = moneytemp; m_classmoney -= money; } void showmoney() { cout << "班费还剩余:" << m_classmoney << endl; } private: char name[10]; float money; }; float student::m_classmoney = 1000; void main() { char one[10] = { 'A' }; char two[10] = { 'B' }; char three[10] = { 'C' }; student A; student B; student C; A.initstudent(one); A.expendmoney(50); A.showmoney(); B.initstudent(two); B.expendmoney(98.5); B.showmoney(); C.initstudent(three); C.expendmoney(500.53); C.showmoney(); }
总结
(1)静态数据成员的初始化与普通数据成员不同。静态数据成员初始化应在类外单独进行,而且应定义对象之前进行。一般在主函数main之前,类声明之后的特殊地带为它提供定义和初始化。初始化格式如下:
数据类型 类名::静态数据成员=初始值
int Ctest::count = 0
这时在数据成员的前面不要加static
(2)静态数据成员属于类的对象的集合,而不像普通函数那样属于某一对象,因此可以使用"::"访问静态的数据成员。
(3)静态数据成员与静态变量一样,是在编译时创建并初始化。它在该类的任何对象被建立之前就存在。因此,共有的数据成员可以在对象被定义之前被访问。对象建立后,共有的静态数据成员也可以被对象进行访问。
(4)使用对象作为函数参数,形参和实参是不同的对象,它们所占地址空间不同,因此,形参
的改变,并不影响实参的值。
(5)使用对象指针作为函数参数中,所谓"传址调用",就是在函数调用时使实参对象和形参对象
的地址传递给函数,形参和实参都指向同一个地址值,此时在函数中对形参对象的修改将影
响调用该函数的实参对象本身。
(6)使用对象引用作为函数的参数,所谓"对象引用",就是对实参对象换了个别名,实际上它们
仍是同一个对象,所以,所谓的形参(别名对象)值的的改变,直接就是实参对象值的改变。



