问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

如何处理类模板深拷贝或浅拷贝问题

发布网友 发布时间:2022-05-03 12:32

我来回答

1个回答

热心网友 时间:2022-04-18 08:53

#include<iostream>
#include<cstdlib>
#include<ctime>
using namespace std;
template<class T>/// 这个是一个模板类,
class A
{
T para1;
T para2;
public:
static int shot_a;
static int shot_b;
A(float p1,float p2)
{
para1=p1/100;
para2=p2/150;
};
A(){};// 默认的构造函数

void score(T c);
float getpara1()
{
float x=float(rand()%100)/10+para1-5;
return x;
};
float getpara2()
{
float x=float(rand()%100)/10+para2-5;
return x;
};
}; ///*不要改变这段程序里面的类型(T和确知的类型)
template<class T>
int A<T>::shot_a=0;
template<class T>
int A<T>::shot_b=0;

int ram(float p,unsigned n)
{
int m=0;
int w=int(p*10000); //*10000容易引发错误,最好是定义为double型
for (int i=0;i<n;i++)
if (rand()%10000<w) m++;
return m;
}

template<class T> // 在外部定义成员
void A<T>::score(T c) //其实你的这里也定义错误了,因为你看,如果你的T的实例时int的话,那么你的c 是一个int型,但是你看c.para,说明c必须是一个结构体,共用体,等
{
int pa=(para1-c.para2/8)/40;
int pb=(c.para1-para2/8)/40;
shot_a=ram(pa,92);
shot_b=ram(pb,92);
}

// template<class T>// 你这里要实现是定义一个对象名的模板? 好像是没法使用吧,因为你写入一个常理不合理,但是在main中你又必须初始化这个,所以貌似不可以对象模板
// A<T> a1(float,float); //此时要与类模板的参数相对应,不能写入常量,类模板的实例 <类模板名> <<数据类型表》》 <<对象名列标>> 入Stack<int> ba; int是实例化的,而ba是实例化int是的对象
// template<class T> //**********
// A<T> a2(float,float); // 主要是没有意义的,因为就是定义了但是在下面也是要重新定义的,因为模板不允许有常量形参

void main()
{
srand(time(0));
//但是这里你错了,因为你没有定义类模板的实例 <类模板名> <<数据类型表》》 <<对象名列标>>
A<int> list;// 这里的list调用了默认的构造函数,你没定义,
// 其实就是这么说吧,被T修饰的地方,如果你定义了A(int)那么所有被T修饰的地方都被int代换,,,,,明白不?这个是实质,可能说的不对,但是有助你理解
A<int> a1(2,3);
A<int> a2(3,3);

cout<<"比赛结果"<<list.shot_a<<"比"<<list.shot_a<<endl;
// 验证你的

cout<<"比赛结果"<<a1.shot_a<<"比"<<a1.shot_a<<endl;
cout<<"比赛结果"<<a2.shot_a<<"比"<<a2.shot_a<<endl;
}

//不知道我的解释你懂不,,嘻嘻,我也在学,,这一部分,恩,你大概是钻了牛角尖了,自己看看书,看清了概念就会明白的,
//
下面是我的一个实验的程序,,你看一下,

// 这个是一个栈类,能够实现对int float ,double ,的进入栈测试,,再实现char 型,和string型的操作
#include <iostream>
#include "string"
using namespace std;
template <class T>
class Stack
{
int size;// 栈的大小
int top;//定义头标志
T* tack;// 定义一个栈的结构,动态分配空间的,
public:
Stack(int=10);// 初始化成10个空间
bool push(const T& );
bool pop(T& );
bool isEmpty()const // 这里是判断的是top==-1而不是top=-1不是赋值的过程所以错误了,
bool isFull()const // 所以在修改错误的时很必须好好的看明白
~Stack()
// 定义析构函数的情况
};
// 下面是在类外定义的情况
// template <class T>
// <返回类型> 类模板名 <类型名表>::成员函数( 形式参数表)

template <class T>
Stack<T>::Stack(int s)
{
size=s>0?s:10;
top=-1;
tack=new T[size];
}
template <class T>
bool Stack<T>::push(const T& pushvalue)
{
if(!isFull())
{
tack[++top]=pushvalue; // 因为这里是0开始的,,,所以先要++
return true; // bool类型,返回值为TRUE或是failed,为了用了看是否满足下一步,但是这里这个值也是可以手动赋的,所以比我一起的方好用
}
return false;
}
template <class T>
bool Stack<T>::pop(T &popvalue)
{
if(!isEmpty())
{
popvalue=tack[top--];
return true;
}
return false;
};

void main()
{
Stack <double> doublestack(5);
double f=1.0;
cout<<"开始为,双精度类型入栈"<<endl;
while(doublestack.push(f))
{
f++;
}
cout<<"栈满了"<<f<<" 不能入栈"<<endl;
cout<<"双精度开始出栈"<<endl;
while(doublestack.pop(f))
{
cout<<f<<" ";
}

Stack<int> intstack;
int a=22;
cout<<endl<<"整形开始入栈"<<endl;
while(intstack.push(a))
{ a+=2;
}
cout<<"出栈"<<endl;
while(intstack.pop(a))
{ cout<<a<<" ";
}
cout<<endl<<"字符型"<<endl;
Stack<char> charstack;
char ch='a';
while(charstack.push(ch))
{ ch+=2;
}
cout<<"字符出栈"<<endl;
while(charstack.pop(ch))
{ cout<<ch<<" ";
}
cout<<endl<<"字串型"<<endl;
Stack<string> ststack;
string st="wosh";
while(ststack.push(st))
{ st;
}
cout<<"出栈"<<endl;
while(ststack.pop(st))
{ cout<<st<<" ";
}

cout<<"\n 元素全部出栈"<<endl;

}追问你这个应该不能正确编绎吧!
class A里面的构造函数有这么写的吗?
A(float p1,float p2)
{
para1=p1/100;
para2=p2/150;
};
函数花括号后面是没有分号的,类和结构体的后面有分号。

声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
...频数和频率成正比,2频数一定时,频率与总次数成反比,对不对_百度... ...总次数之间的关系是( ) A.频数越大,频率越大 B.总次数一定时,频数越... 实验的总次数、频数及频率三者的关系是( )A.频数越大,频率越大B.频数... 嘎牙鱼的做法大全 安无线网要用多少元网费要交多少元不用用了要不要交网费,想寻求大家的... 无线网费1年多少钱 "Hbr"作为“港”的缩写,其在英语中的使用频率和应用示例如何? 【车主点评:吉利汽车帝豪GL 使我荣华富贵】 请问,如果,家用,自动挡,帝豪gl,英朗,科沃兹,卡罗拉,轩逸,同等价位,建议... ...景点?既能休闲的时候看看又能长点知识@@谢谢各位了! ...家里网是好的,手机,电脑都可以用,小度也可以连接热点? 如果在类模板的定义中有一个静态数据成员 则在程序运行时产生几个静态变量 类模版 在这题中怎么把成员函数正确定义在类外 谢谢了 北京哪里的遮阳伞价格合理,售后最好呀! 类模板的定义与使用 C++模板类和类模板 学到了类模板,但完全不理解,求高手指点,最好附上例子,谢谢 了 C++问题求解,在类中为什么不能给数据成员初始化值: 什么是类模板? 为什么word上做表格,表格下面没有办法写字 类中静态数据成员问题 类模板成员函数:cannot access private member 错误释疑 为什么在word中画了表格后不能写入文字的呢? 一个C++问题,声明一个类模板MB,有数据成员x和y··· 不可以成为类的数据成员的是______ A自身类的对象 B另一个类的对象 C自身类的指针或引用 在java中,是不是 类 有数据成员和成员方法,对象 也有数据成员和成员方法 鲨鱼怎么烧好吃 代码中有两个类,如果第一个类是模板形式,不可以在第二个类中使用第一个类定义数据成员? 山西欣妍美业文化传播有限公司怎么样? 欧曼谛时尚美业学校怎么样? 请教一下哪里有专门做遮阳伞、罗马伞、侧边伞的? c++创建链表为什么要用类模板 什么是类模板?使用MFC类模板必须包含哪个头文件? 模板类的中的模板数据成员如何初始化? C++中, 类的私有数据成员在定义的时候不能进行初始化吗? 企石哪里遮阳伞出租 已持有工行电子密码器,如何再办理U盾? 苏州电视广告有限公司怎么样? 寻找苏州电视放的一个公益广告 为什么在苏州 东方卫视的广告会被掐掉? 要在江苏电视台打广告,如何联系? 在苏州电视台上黄金时间段播一个5秒中的广告需要多少费用? 苏州有线电视台播放很恶心的电影 苏州电视台服务公司怎么样? 苏州有哪些媒体 急急~~ 江苏电视台广告部 以前是苏州电视台的主持人,后来做广告生意的是谁 最近在央视看到一个介绍苏州各个区县的宣传广告,哪里可以看到这段视频? 在苏州差点被“黑”,如何找电视台曝光黑幕? 求苏州华润置地平门府电视广告的背景音乐