c++问题:声明一个矩形模板类CRectangle 错误:error C2629: unexpected 'class CRectangle<T> (' 求指点
题目:3.声明一个矩形模板类CRectangle,要求如下:l具有两个保护类型的数据成员:width和heightl实现带参数的构造函数、拷贝构造函数、析构函数l实现内联...
题目:
3. 声明一个矩形模板类CRectangle,要求如下: l具有两个保护类型的数据成员:width 和 height l实现带参数的构造函数、拷贝构造函数、析构函数 l实现内联成员函数getWidth()、getHeight()、getArea() l在main函数中测试CRectangle的构造函数、拷贝构造函数、析构函数、面积计算函数。代码如下
#include<iostream.h>
template <class T>
class CRectangle
{
public:
void getHeight() {return height;}
void getWidth() {return width;}
void getArea()
{
cout<<"矩形的面积为:"<<getHeight()*getWidth()<<endl;
}
CRectangle(double h,double w);
CRectangle(const Rectangle& rec);
~CRectangle();
protected:
double height;
double width;
};
CRectangle::CRectangle(double h,double w)
{
height=h;
width=w;
cout<< "带参构造函数被调用" << endl;
}
CRectangle::CRectangle(const Rectangle& rec)
{
length=rec.length;
width=rec.width;
cout<< "拷贝构造函数被调用" << endl;
}
CRectangle::~CRectangle()
{
cout<< "析构函数被调用" << endl;
}
void f(Shape &p)
{cout<<p.getArea()<<endl;}
void main()
{
CRectangle t(3,4);
CRectangle s=t;
f(s);
} 展开
3. 声明一个矩形模板类CRectangle,要求如下: l具有两个保护类型的数据成员:width 和 height l实现带参数的构造函数、拷贝构造函数、析构函数 l实现内联成员函数getWidth()、getHeight()、getArea() l在main函数中测试CRectangle的构造函数、拷贝构造函数、析构函数、面积计算函数。代码如下
#include<iostream.h>
template <class T>
class CRectangle
{
public:
void getHeight() {return height;}
void getWidth() {return width;}
void getArea()
{
cout<<"矩形的面积为:"<<getHeight()*getWidth()<<endl;
}
CRectangle(double h,double w);
CRectangle(const Rectangle& rec);
~CRectangle();
protected:
double height;
double width;
};
CRectangle::CRectangle(double h,double w)
{
height=h;
width=w;
cout<< "带参构造函数被调用" << endl;
}
CRectangle::CRectangle(const Rectangle& rec)
{
length=rec.length;
width=rec.width;
cout<< "拷贝构造函数被调用" << endl;
}
CRectangle::~CRectangle()
{
cout<< "析构函数被调用" << endl;
}
void f(Shape &p)
{cout<<p.getArea()<<endl;}
void main()
{
CRectangle t(3,4);
CRectangle s=t;
f(s);
} 展开
4个回答
展开全部
修改如下:
#include<iostream.h>
template <class T>
class CRectangle{
public:
T getHeight() {return height;} // 返回值为T
T getWidth() {return width;} // 返回值类型为T
T getArea() { cout<<"矩形的面积为:"<<getHeight()*getWidth()<<endl;}
CRectangle(T h,T w);
CRectangle(const CRectangle& rec);
~CRectangle();
protected:
T height; T width; // 既然是模版类,就要使用模版类型T
};
template <class T> // 加上这句话
CRectangle<T>::CRectangle(T h,T w) //
{
height=h; width=w; cout<< "带参构造函数被调用" << endl;
}
template <class T>//
CRectangle<T>::CRectangle(const CRectangle<T>& rec)//
{
height=rec.height;
width=rec.width;
cout<< "拷贝构造函数被调用" << endl;
}
template <class T>//
CRectangle<T>::~CRectangle()//
{
cout<< "析构函数被调用" << endl;
}
template <class T>
void f(CRectangle<T> &p)//这里是使用上面的模版类
{
p.getArea(); // getArea()中已经使用cout了,这里直接调用
}
main()
{
CRectangle<int> t(3,4); // 具体化模版类
CRectangle<int> s=t;
f(s);
}
#include<iostream.h>
template <class T>
class CRectangle{
public:
T getHeight() {return height;} // 返回值为T
T getWidth() {return width;} // 返回值类型为T
T getArea() { cout<<"矩形的面积为:"<<getHeight()*getWidth()<<endl;}
CRectangle(T h,T w);
CRectangle(const CRectangle& rec);
~CRectangle();
protected:
T height; T width; // 既然是模版类,就要使用模版类型T
};
template <class T> // 加上这句话
CRectangle<T>::CRectangle(T h,T w) //
{
height=h; width=w; cout<< "带参构造函数被调用" << endl;
}
template <class T>//
CRectangle<T>::CRectangle(const CRectangle<T>& rec)//
{
height=rec.height;
width=rec.width;
cout<< "拷贝构造函数被调用" << endl;
}
template <class T>//
CRectangle<T>::~CRectangle()//
{
cout<< "析构函数被调用" << endl;
}
template <class T>
void f(CRectangle<T> &p)//这里是使用上面的模版类
{
p.getArea(); // getArea()中已经使用cout了,这里直接调用
}
main()
{
CRectangle<int> t(3,4); // 具体化模版类
CRectangle<int> s=t;
f(s);
}
展开全部
#include<iostream.h>
template <class T>
class CRectangle
{
public:
T getHeight() {return height;}
T getWidth() {return width;}
T getArea()
{
cout<<"矩形的面积为:"<<getHeight()*getWidth()<<endl;
return height*width;
}
CRectangle(T h,T w);
CRectangle(const Rectangle& rec);
~CRectangle();
protected:
T height;
T width;
};
template <class T>
CRectangle<T>::CRectangle(T h,T w)
{
height=h;
width=w;
cout<< "带参构造函数被调用" << endl;
}
template <class T>
CRectangle<T>::CRectangle(const Rectangle<T>& rec)
{
height=rec.height;
width=rec.width;
cout<< "拷贝构造函数被调用" << endl;
}
template <class T>
CRectangle<T>::~CRectangle()
{
cout<< "析构函数被调用" << endl;
}
void main()
{
CRectangle<int> t(3,4);
CRectangle<int> s=t;
cout<<"矩形的面积为:"<<s.getArea()<<endl;
}
template <class T>
class CRectangle
{
public:
T getHeight() {return height;}
T getWidth() {return width;}
T getArea()
{
cout<<"矩形的面积为:"<<getHeight()*getWidth()<<endl;
return height*width;
}
CRectangle(T h,T w);
CRectangle(const Rectangle& rec);
~CRectangle();
protected:
T height;
T width;
};
template <class T>
CRectangle<T>::CRectangle(T h,T w)
{
height=h;
width=w;
cout<< "带参构造函数被调用" << endl;
}
template <class T>
CRectangle<T>::CRectangle(const Rectangle<T>& rec)
{
height=rec.height;
width=rec.width;
cout<< "拷贝构造函数被调用" << endl;
}
template <class T>
CRectangle<T>::~CRectangle()
{
cout<< "析构函数被调用" << endl;
}
void main()
{
CRectangle<int> t(3,4);
CRectangle<int> s=t;
cout<<"矩形的面积为:"<<s.getArea()<<endl;
}
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
楼主的代码不全吧,Shape是什么东西?
主要问题有三个,第一是为什么要用模板,里面也没用到T
第二是在类外部定义成员函数的时候没加模板,所有外面的方法改成像这样的就行了:
template <class T>
CRectangle<T>::~CRectangle()
第三,CRectangle::CRectangle(const Rectangle& rec)是把参数类型写错了吧,参数也是CRectangle类型的吧。
你是想用模板定义里面数据的类型吧,而且还有继承结构的,还要多态的吧,呵呵。
主要问题有三个,第一是为什么要用模板,里面也没用到T
第二是在类外部定义成员函数的时候没加模板,所有外面的方法改成像这样的就行了:
template <class T>
CRectangle<T>::~CRectangle()
第三,CRectangle::CRectangle(const Rectangle& rec)是把参数类型写错了吧,参数也是CRectangle类型的吧。
你是想用模板定义里面数据的类型吧,而且还有继承结构的,还要多态的吧,呵呵。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
CRectangle::CRectangle(const Rectangle& rec)
{
length=rec.length;
width=rec.width;
cout<< "拷贝构造函数被调用" << endl;
}
length跟width是protected成员,不能用 . 访问
{
length=rec.length;
width=rec.width;
cout<< "拷贝构造函数被调用" << endl;
}
length跟width是protected成员,不能用 . 访问
追问
加了
void getHeight() {return height;}
void getWidth() {return width;}
还不行么
追答
protected成员只能被友元或者类内中的成员访问,不允许外部对象直接访问,可以改成length=rec.hetLength()和width=rec.getWidth()
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询