struct:结构体内默认访问权限:public公共->哪里都能用
class:结构体内默认访问权限:private私有->只能在类里使用
简单版本:
class SV
{
public:
SV(int dt = 520)
:_data1(dt)
{};
int R_num()
{
return _data1;
}
private:
int _data1;
};
复杂版本:
template<class T1,class T2>
class CT//complex_type
{
public:
CT(const T1 dt1 = 13,const T2 dt2 = 14)
:_data2(dt1)
, _data3(dt2)
{}
void Print()
{
cout << "520 " << _data2 << " " << _data3 << endl;
}
private:
T1 _data2;
T2 _data3;
};
测试程序
无模板
//sv1生命周期在main中,main执行完后sv1销毁
SV sv1;
cout << sv1.R_num() << endl;
//SV()为匿名对象--以类名创建的--类名+()==匿名对象
//生命周期只在匿名对象所在一行
cout << SV().R_num() << endl;
//正常对象调用有参构造是SV sv2(在括号中传参)
SV sv2(987);
//SV()是匿名对象给匿名对象使用有参构造同样在括号中传参
SV(1234);
有模板
//单独申请类型对象
//声明周期同sv1
CT<int,int> ct1;
ct1.Print();
//有模板匿名对象调用函数
//正常情况CT()为匿名对象
//现在加入模板,需要显示实例化模板类型,CT<int,int>()
//此时匿名对象为:CT<int,int>(),再使用时就和简单版本匿名对象一样加“.”使用
CT<int, int>().Print();
//有模板匿名对象传参构造
//CT是一个类模板,无模板时同SV == SV(1234);
//有模板时-无传参-显示实例化-为CT<类型1,类型2>()
//有传参--CT<类型1,类型2>(在括号中传参)==CT<int, double>(321, 123.0);
CT<int, double>(321, 123.0);//类似CT(321,123)