1. 静态数据成员与静态函数成员实例
程序一:
#include<bits/stdc++.h> using namespace std; class Cat{ public: Cat(int age1=0) { age=age1; numOfCats++; }//构造函数,总数加一 ~Cat() { numOfCats--; }//析构函数,个数减一 Cat(Cat &p) { age=p.age; numOfCats++; }//复制构造函数,个数加一 void getage() { cout<<age<<endl; }//输出年龄 static void getNumOfCats() { cout<<"cat的数量为:"<<numOfCats<<endl; }//静态成员函数 输出总数 void reage(int age1) { age=age1; }//修改年龄 private: static int numOfCats;//静态数据成员 int age; }; int Cat::numOfCats=0;//外部定义一次,赋初值,开辟单独空间 int main() { Cat a(12); Cat::getNumOfCats();//创建对象a 利用构造函数 输出总个数 Cat b=a; Cat::getNumOfCats();//创建对象b 利用复制构造函数 输出总个数 a.reage(6); b.getage(); Cat::getNumOfCats();//调用修改函数和输出函数,查看这两个函数对总数的影响 }
结果:
程序二(使用动态分配内存):
#include<bits/stdc++.h> using namespace std; const int N = 1e4; int n,t; class Cat{ public: Cat(int age1=0) { age=age1; numOfCats++; }//构造函数,总数加一 ~Cat() { numOfCats--; }//析构函数,个数减一 Cat(Cat &p) { age=p.age; numOfCats++; }//复制构造函数,个数加一 void getage() { cout<<"第"<<numOfCats<<"个对象的年龄为:"<<age<<endl; }//输出年龄 static void getNumOfCats() { cout<<"cat的数量为:"<<numOfCats<<endl; }//静态成员函数 输出总数 void reage(int age1) { age=age1; }//修改年龄 private: static int numOfCats;//静态数据成员 int age; }; int Cat::numOfCats=0;//外部定义一次,赋初值,开辟单独空间 int main() { Cat *cat[N]; cin>>n;//输入个数 for(int i=1;i<=n;i++) { cin>>t;//输入每个对象的age cat[i]=new Cat(t);//每一个对象使用new函数创建 cat[i]->getage();//注意用 -> 去访问 Cat::getNumOfCats();//输出个数 } cout<<endl; for(int i=1;i<=n;i++) { delete cat[i];//依次删除每个对象 Cat::getNumOfCats(); } }
输入和结果:
2.友元函数实例
程序一:
#include<bits/stdc++.h> using namespace std; class Boat;//提前声明Boat类 class Car{ private: int weight; public: Car(int weight1=0) { weight=weight1; }//构造函数 ~Car(){}//析构函数 friend int getTotalWeight(Car &Cara,Boat &Boata);//友元函数,注意在其中是类的引用,方便且高效 }; class Boat{ private: int weight; public: Boat(int weight1=0) { weight=weight1; }//构造函数 ~Boat(){}//析构函数 friend int getTotalWeight(Car &Cara,Boat &Boata); }; int getTotalWeight(Car &Cara,Boat &Boata) { return Cara.weight+Boata.weight; }//友元函数实现,可直接访问两个类的私有成员 int main() { Boat a(11); Car b(12);//创建两个类 cout<<getTotalWeight(b,a)<<endl;//输出总重 Boat c(123); Car d(122);//创建两个新类 cout<<getTotalWeight(d,c);//输出总重 }
结果:
程序二(动态分配内存):
#include<bits/stdc++.h> using namespace std; int weight1,weight2; class Boat; class Car{ private: int weight; public: Car(int weight1=0) { weight=weight1; } ~Car(){} friend void getTotalWeight(Car &Cara,Boat &Boata); };//类Car class Boat{ private: int weight; public: Boat(int weight1=0) { weight=weight1; } ~Boat(){} friend void getTotalWeight(Car &Cara,Boat &Boata); };//类Boat void getTotalWeight(Car &Cara,Boat &Boata) { cout<<Cara.weight+Boata.weight; }//友元函数 int main() { Boat *boat[11]; Car *car[11];//创建两个类的组 for(int i=1;i<=3;i++) { cin>>weight1>>weight2; car[i]=new Car(weight1); boat[i]=new Boat(weight2); cout<<"第"<<i<<"组的总重为:"; getTotalWeight(*car[i],*boat[i]);//每一组调用友元函数并输出,注意调用的时候带上 * 号; cout<<endl; } }
结果:
总结:关于类的动态分配内存非常方便,关于其应用的new函数与delete函数也非常的好用,
但要注意当调用带引用的友元函时,使用时要带好星号,传入指针
getTotalWeight(*car[i],*boat[i]);
当访问动态分配内存对象的外部接口时,要使用箭头;
cat[i]->getage();
更新:
动态内存分配是通过指针来实现的,当通过指针来调用类的成员时要用箭头来实现;