首页 > 编程知识 正文

c语言课程设计模板,c语言与c十十的区别

时间:2023-05-03 18:03:11 阅读:169295 作者:4543

c不仅支持函数模板,还支持类模板(Class Template )。 在函数模板中定义的类型参数可用于函数声明和函数定义中,而在类模板中定义的类型参数可用于类声明和类实现中。 类模板的目的是参数化数据类型。

声明类模板的语法如下:

template class类名{

//TODO:

(;

类模板和函数模板都以template开头,后跟类型参数。 当然,也可以使用class。 目前,这些没有区别。 类型参数不能为空。 多个类型参数由逗号分隔。

但是,声明类模板时,可以在类的成员函数和成员变量中使用类型参数。 换句话说,原本使用int、float、char等内置类型的地方,可以用类型参数来替换。

在此定义表示坐标的类时,坐标的数据类型必须是整数、小数或字符串。 例如:

x=10,y=10

x=12.88,y=129.65

x='东经180度',y='北纬210度'

此时可以使用类模板。 请看下面的代码。

template //这里不能有分号

class Point{

公共:

point(T1x,T2 y ) :m_x(x ),m _ y { }

公共:

T1 getX ) ) const; 获取//x坐标

voidSETX(T1X; 设定//x坐标

T2 getY ) ) const; 获取//y坐标

voidsety(T2Y; 设置//y坐标

私有:

T1 m_x; //x坐标

T2 m_y; //y坐标

(;

虽然不确定x和y坐标的数据类型,但类模板允许参数化数据类型,从而消除了定义多个类的需要。

注意:模板标题和类标题是一体化的,可以换行,但不要在中间加分号。

上面的代码只是类的声明,必须在类之外定义成员函数。 在类之外定义成员函数时,必须使用以下格式标记模板标题:

template

返回类型类名:函数名(类型参数列表)。

//TODO:

}

第一行是模板标题,第二行是函数标题,可以放在一行中,但为了便于代码格式,通常分为两行。

然后定义Point类的成员函数。

template //模板标头

T1 Point:getX () const /*函数标头(/

return m_x;

}

template

语音点:3360 setx (t1x ) )。

m_x=x;

}

template

T2 Point:getY () const{

return m_y;

}

template

voidpoint:3360sety(T2Y ) {

m_y=y;

}

除了在template关键字之后指定类型参数外,还应在类名Point之后引用类型参数。 但是,不添加typename关键字。 另外,在类外定义成员函数时,请注意template之后的类型参数必须与类声明时的类型参数匹配。

使用类模板创建对象

在上面的两个代码中定义了类之后,可以使用该类创建对象。 如果使用类模板创建对象,则必须指定特定的数据类型。 请看以下代码:

point P1 (10,20 );

pointp2(10,15.5;

pointp3) 12.4、“东经180度”

与函数模板不同,类模板必须在实例化时显式指定数据类型,编译器无法基于指定的数据推送数据类型。

除了对象变量外,还可以使用对象指针实例化。

point * P1=new point (10.6,109.3 );

Point *p=new Point (东经180度,北纬210度);

请注意,赋值号都表示特定的数据类型,并且必须保持一致。 以下格式是错误的:

//赋值编号两侧的数据类型不一致

point * p=new point (10.6,109 );

//赋值编号的右侧未显示数据类型

point * p=new point (10.6,109 );

综合例

将上述类定义与类实例化的代码集成在一起,完整的示例如下:

#包含

using namespace std;

template //这里不能有分号

class Point{

公共:

point(T1x,T2 y ) :m_x(x ),m _ y { }

公共:

T1 getX ) ) const; 获取//x坐标

voidsetx(T1x; 设定//x坐标

T2 getY ) ) const; 获取//y坐标

voidsety(T2Y; 设置//y坐标

私有:

T1 m_x; //x坐标

T2 m_y; //y坐标

(;

template //模板标头

T1 Point:getX () const /*函数标头(/

return m_x;

}

template

语音点:3360 setx (t1x ) )。

m_x=x;

}

template

T2 Point:getY () const{

return m_y;

}

template

voidpoint:3360sety(T2Y ) {

m_y=y;

}

int main ()。

point P1 (10,20 );

出局

pointp2(10、“东经180度”

出局

Point *p3=new Point (东经180度,北纬210度);

coutgetX () getY ) )。

返回0;

}

执行结果:

x=10,y=20

x=10,y=东经180度

x=东经180度,y=北纬210度

定义类型参数时使用了class而不是typename。 这样做的目的是帮助读者熟悉这两种写法。

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。