Part A
# 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;
}
1、对象ob作为形参
2、指针ob作为形参
3、引用ob作为形参
Part B
# include<iostream>
using 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;
}
Part C
# include<iostream>
#include<string.h>
using namespace std;
class TStudent
{
static float m_ClassMoney;
char name1[3][100];
static int j;
public:
void InitStudent(char name[]);
void ExpendMoney(float money);
void ShowMoney();
};
float TStudent::m_ClassMoney = 1000;
int TStudent::j = 0;
void TStudent::InitStudent(char name[])
{
strcpy_s(name1[j], name);
j++;
}
void TStudent::ExpendMoney(float money)
{
m_ClassMoney = m_ClassMoney - money;
}
void TStudent::ShowMoney()
{
cout << "班费还剩余" << m_ClassMoney << endl;
}
int main(void)
{
TStudent A, B, C;
char name[3][100];
float money;
for (int i = 0; i < 3; i++)
{
cout << "请输入学生姓名" << endl;
cin >> name[i];
}
A.InitStudent(name[0]);
B.InitStudent(name[1]);
C.InitStudent(name[2]);
cout << "请输入消费金额" << endl;
cin >> money;
A.ExpendMoney(money);
A.ShowMoney();
cout << "请输入消费金额" << endl;
cin >> money;
B.ExpendMoney(money);
B.ShowMoney();
cout << "请输入消费金额" << endl;
cin >> money;
C.ExpendMoney(money);
C.ShowMoney();
}
Part A:
对象可以作为参数传递给函数,但是是单向传递,只有实参传给形参,形参不能传给实参,因此函数中对对象的修改不影响该函数的调用。
指针作为函数的参数时传递的是对象的地址值,所以对形参的修改会影响实参本身。
对象引用和对象指针的输出结果相同,但是引用是定义时被初始化之后就不能修改了,二指针还能被修改。
Part B
静态成员包括静态数据成员和静态函数成员,静态成员为所有对象共享,只有一份存于公共内存中。
静态数据成员:静态数据成员是属于类的,一旦声明某个数据成员为静态数据成员,则该类的每个对象都可以访问它。声明格式:static 数据类型 数据成员名;其初始化与普通数据成员不同,须在类外单独进行初始化,而且初始化要在定义对象之前进行;格式:数据类型 类名::静态数据成员名 = 初始值; 对象访问静态数据成员格式:对象名.静态数据成员名;对象指针->静态数据成员名;
静态成员函数:静态成员函数属于类,不属于该类的某个对象,为该类的所有对象共享。定义格式:static 返回类型 静态成员函数名(实参表);调用格式:1、类名::静态成员函数名(实参表)2、对象.静态成员函数名(实参表)3、对象指针->静态成员函数名(实参表)静态成员函数主要用来静态数据成员;私有静态成员函数不能被类外部的的函数和对象访问;使用静态成员函数的原因是可以用它在建立任何对象之前调用静态成员函数对静态数据成员进行处理,而这一功能是普通成员函数不能做到的。同静态数据成员一样,公有静态成员函数在类外可以使用如下格式进行调用:类名::静态成员函数名()
Part C
定义 TStudent类,其中m_ClassMoney作为静态变量,在类外进行初始化,初始值为1000,lnitstudent(char name[])函数将名字初始化,strcpy_s(name1[j], name)将输入的名字赋值到name1[]数组中去,为了使名字不会重复被覆盖,还定义了一个静态变量j,j的初始值为0。ExpendMoney(money)和ShowMoney()都只是简单的对变量m_ClassMoney进行运算,减去输入的花费的钱,输出剩余的钱。需要注意的是,定义的格式为TStudent::ExpendMoney和TStudent::ShowMoney.在主函数中,完成对名字的初始化之后,就只需依次调用这两个函数即可。