C++数据共享与复用

提起数据共享与复用,想到的是模板、继承、友元、全局变量、静态成员,因此做此总结。
C++数据共享方式:

  1. 全局变量、全局函数、外部变量、外部函数。
    后者需要extern声明。
  2. 类的静态成员
    (类成员有三种访问权限,在类中,无论何种权限的成员都可直接访问;而在类外,只能通过类的对象访问public成员)
    而类所有对象共享静态成员,静态成员包括静态数据成员和静态成员函数,其中静态数据成员函数只能访问静态数据成员。
    定义:类内声明前加static.使用如下:
class A{
public:
//静态成员因为类共享,因此不可使用this指针。
 	static string banji;
 	//静态数据成员,只能类内声明,类外初始化。
 	//静态成员函数只能访问静态数据成员。
 	static void getinfo1()
 	{
 	cout<<banji<<endl;
 	};
 	string name;
};
/*调用,因为不属于某个对象,因此只能通过
类名::静态成员形式访问*/
string A::banji="2018-2";
A::getinfol();
  1. 友元
    友元,会破坏数据封装和隐藏,友元的目的就是让一个函数/类访问另一个类的私有成员。友元包括友元函数和友元类两种情况,友元函数既可以是类的成员函数也可以是普通全局函数。·
//case1:全局函数做友元函数,其参数一般为类的对象
class A{
public:
	friend void fun(A a);
	string name;
private:
	int age;
};
void fun(A a){cout<<a.age<<endl;}
/*case2:成员函数作为友元函数,对其参数没有要有
对象的要求,但是若没有,则成函所属类应有
被访问类的对象做为数据成员*/
class A1;
class A{
public:
	friend void A1::fun();//声明类A1的成函是类A的友元函数。
	string name;
private:
	int age;
};
class A1{
public:
	void fun();
    A a;
};
void A1::fun()//类外定义成函的格式。
{cout<<a.age<<endl;}
//case3:友元类
class A1;
class A{
public:
  string name;
 friend class A1;//表明类A1是类A的友元类,A1可以访问A类对象的私有成员。
private:
	int age;
};
class A1{
public:
   A a;
   void fun(){
   cout<<a.name<<"的年龄是"<<a.age<<endl;
   }
};
  1. 模板
    模板包括模板函数和模板类,当类A和类B差别不大,只是成员参数类型不同时,就很适合用模板。
    关键字:template<class T1,Typename T2>
    (1)模板函数
template<class T1,Typename T2>
void readout(T1 a,T2 b){
	cout<<"第一个:"<<a<<endl;
	cout<<"第二个:"<<b<<endl;
}
int main()
{
int a=3;
string b="3";
char c='6';
int d=6;
//调用模板函数
read(a,d);//可以由编译器根据传入参数自动生成
read<int>(3,6);//也可以明确指定要参数实例话哪种类型。
return 0}

(2)模板类

template<Typename T>
class A{
public:
	A(T t){
	this->t=t;
	}
	T get()
	{
	return t;
	}
protected:
	T t;
};
A<int> a(100)//初始化一个对象。
class B:public A<int>
{
public:
  B(int a=10,int b=10):A<int> (a)
  {
  this->b=b;
  }
private:
  int b;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值