part a
三种不同的对象传递方式
1.使用对象作为函数参数
对象可以作为参数传递给函数,其方法与传递基本类型的变量相同。在向函数传递对象时,是通过“传值调用”传递给函数的,即单向传递,只由实参传给形参,而不能由形参传回来给实参。因此函数中对对象的任何修改均不影响调用该函数的对象(实参)本身。
代码
#include<iostream> using 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; }
2.使用对象指针作为函数参数
对象指针可以作为函数的参数,使用对象指针作为函数参数可以实现“传址调用”,即在函数调用时使实参对象和形参对象指针变量指向同一内存地址,在丽数调用过程中,对形参对象指针所指对象值的改变也同样影响着实参对象的值。当函数的形参是对象指针时,调用函数的对应实参应该是某个对象的地址值。
代码
#include<iostream> using 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; }}
3.使用对象作为函数参数
对象可以作为参数传递给函数,其方法与传递基本类型的变量相同。在向函数传递对象时,是通过“传值调用”传递给函数的,即单向传递,只由实参传给形参,而不能由形参传回来给实参。因此函数中对对象的任何修改均不影响调用该函数的对象(实参)本身。
代码
#include<iostream> using 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; }
part b
#include<iostream> using namespace std; class Ctest { static int count; public: Ctest() { ++count; cout << "对象数量=" << count << endl; } }; int Ctest::count = 0; int main(void) { Ctest a[3]; return 0; }
part c
#include<iostream> #include<string> using namespace std; class Student { public: void InitStudent(); void ExpendMoney(float money); void ShowMoney(); static float m_ClassMoney; private: string name; float money=0; }; void Student::InitStudent() { cout << "学生姓名"; cin >> name; } void Student::ExpendMoney(float money) { m_ClassMoney -= money; } void Student::ShowMoney() { cout << "班费余额" << m_ClassMoney << endl; } float Student::m_ClassMoney = 1000; int main() { Student A; A.InitStudent(); A.ExpendMoney(50); A.ShowMoney(); Student B; B.InitStudent(); B.ExpendMoney(98.5); B.ShowMoney(); Student C; C.InitStudent(); C.ExpendMoney(500.53); C.ShowMoney(); return 0; }