C++郑莉课后题-第五章-编程部分

5-7 定义一个Cat类,拥有静态数据成员numOfCats,记录Cat的个体数目;静态成员函数getNumOfCats(),读取numOfCats.设计程序测试这个类,体会静态数据成员和静态成员函数的用法。
 

#include<iostream>
using namespace std;
class Cat{
 static	int numOfCats;
 public:
 	Cat(){ numOfCats++;	 }
	 ~Cat(){ numOfCats--;}
 static int getNumOfCats();
};
int Cat::getNumOfCats(){
	return numOfCats;
}
int Cat::numOfCats=0;

int main(){
	Cat A;
	cout<<Cat::getNumOfCats()<<endl;
	cout<<A.getNumOfCats();
return 0;
}

5-10在一个文件中定义一个全局变量n,主函数main(),在另一个文件中定义函数fnl(),在main()中对n赋值,再调用fnl(),在fnl()中也对n赋值,显示n最后的值。

#include<iostream>
#include "test2.cpp" 
using namespace std;
int n;

int main(){
	n=1;
	fnl();
	cout<<n;
return 0;
}

//test2.cpp
#include<iostream>
using namespace std;
extern int n;
void fnl(){
	n=2;
}

extern int n;

5-12 在函数fnl()中定义一个静态变量n,fnl()中对n的值加1,在主函数中,调用nl()十次,显示n的值。——static静态,让局部变量延长生存期

#include<iostream>
using namespace std;
void fn1(){
	static int n1=0;
	int n2=0;
	n1++;
	n2++;
	cout<<"n1= "<<n1<<endl;
	cout<<"n2= "<<n2<<endl;
}

int main(){
	for(int i=0;i<10;++i)
	fn1();
return 0;
}

5-13 定义类X,Y,Z,函数 h(X*),满足:类X有私有成员i,Y的成员函数 g(X*) 是X的友元函数,实现对X的成员i加1;类Z是类X的友元类,其成员函数 f(X*) 实现对X的成员i加5;函数 h(X*) 是X的友元函数,实现对X的成员i加10,在一个文件中定义和实现类,在另一个文件中实现main()函数。

-嵌套调用:

  • 先声明了才能调用。
  • 类只声明不实现的时候不能有对象,此时可以不写对象(X* )vs(X* x)
  • 此时函数声明可以没有具体形参名字,只有形参类型 (X* ),实现加名字(X* x)
  • friend 完整的声明:friend class A; friend void Y::g(X* );
#include<iostream>
using namespace std;
//先写才能调用
class X;

class Y{
	public:
		void g(X* );
};

class Z{
	public:
		void f(X* );
};
class X{
   int i;
   public:
   X( ){ i=0; }
   friend void Y::g(X* );
   friend class Z;
   friend  void h(X*);
   void showi(){ cout<<i<<endl;
   }
};
       void Y::g(X* x){x->i++;}
       void Z::f(X* x){x->i+=5;}
        void h(X* x){x->i+=10;}
int main(){
	X x;
	x.showi();
	Z z;
	z.f(&x);
	x.showi();
	Y y;
	y.g(&x);
	x.showi();
	h(&x);
	x.showi();
	return 0;
}

5-14 定义Boat与Car两个类,二者都有weight属性,定义二者的一个友元函数getTotalWeight().计算二者的重量和。

#include<iostream>
using namespace std;

class Car;

 class Boat{
 	double weight;
 	public:
 		Boat(int w=0):weight(w){		 }
 		friend  double getTotalWeight(Boat& b,Car&a);
 };
 
 class Car{
 	double weight;
 	public:
 		Car(int w=0):weight(w){		 }
 		friend  double getTotalWeight(Boat&b,Car&a);
 };
 double getTotalWeight(Boat& b,Car& a){
 	  return b.weight+a.weight;
 }
int main(){
   Boat b(3);
   Car c(5);
  cout<< getTotalWeight(b,c);
	return 0;
}

小结

-嵌套调用:

  • 先声明了才能调用。
  • 类只声明不实现的时候不能有对象
  • 此时函数声明可以没有具体形参名字,只有形参类型 (X* ),实现加名字(X* x)
  • friend 完整的声明:friend class A; friend void Y::g(X* );
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值