结构体与函数重载.cpp(c++)
C和C++混合编程
C和C++混合编程
extern "C"表⽰编译⽣成的内部符号名使⽤C约定。C++⽀持函数重载,⽽C不⽀持,两者的编译规则也不⼀样。函数被C++编译后在符号库中的名字与C语⾔的不同。例如,假设某个函数的原型为:void foo( int x, int y ); 该函数被C编译器编译后在符号库中的名字可能为_foo,⽽C++编译器则会产⽣像_foo_int_int之类的名字(不同的编译器可能⽣成的名字不同,但是都采⽤了相同的机制,⽣成的新名字称为“mangled name”)。_foo_int_int这样的名字包含了函数名、函数参数数量及类型信息,C++就是靠这种机制来实现函数重载的。下⾯以例⼦说明,如何在C++中使⽤C的函数,或者在C中使⽤C++的函数。
⼀://C++引⽤C函数的例⼦(C++调⽤C,extern "C" 的作⽤是:让C++连接器找调⽤函数的符号时采⽤C的⽅式如)
//test.c
#include
void mytest()
{
printf("mytest in .c file ok\n");
}
//main.cpp
extern "C"
{
void mytest();
}
int main()
{
mytest();
return 0;
}
上述也可以加个头⽂件
//test.h
void mytest()
在后在main.cpp中extern "C"
{
#include “test.h”
}
⼆://在C中引⽤C++函数(C调⽤C++,使⽤extern "C"则是告诉编译器把cpp⽂件中extern "C"定义的函数依照C的⽅式来编译封装接⼝,当然接⼝函数⾥⾯的
c++ 结构operator用法
c++ 结构operator用法
摘要:
1.C++结构体的概述
2.结构体的成员访问和修改
3.结构体的运算符重载
4.结构体的函数成员
5.结构体与类的异同
正文:
C++结构体是一种聚合数据类型,它可以将多个不同类型的数据组合在一起。结构体主要应用于以下场景:表示对象的属性和方法、表示数组或指针的尺寸和类型、表示函数的参数和返回值等。本篇文章将详细介绍C++结构体的相关知识,包括结构体的成员访问和修改、运算符重载、函数成员以及结构体与类的异同。
首先,我们来了解结构体的成员访问和修改。结构体的成员可以通过点运算符(.)或箭头运算符(->)进行访问和修改。例如,定义一个表示点的结构体Point,其中包含x 和y 坐标,可以通过以下方式访问和修改成员变量:```cpp
struct Point {
int x;
int y;
};
int main() {
Point p1;
p1.x = 1;
p1.y = 2;
cout << "P1( " << p1.x << ", " << p1.y << " )" << endl;
return 0;
}
```
接下来,我们介绍结构体的运算符重载。当结构体中包含运算符重载函数时,需要使用友元声明。例如,定义一个表示复数的结构体Complex,其中包含实部和虚部,可以重载+、-、*、/等运算符:
```cpp
struct Complex {
double real;
double imag;
public:
friend double Complex::operator+(const Complex& c1, const Complex& c2);
c++入门基础PPT
丰富的标准库
C标准库提供了大量的实用组件 ,如STL(标准模板库)、 iostream库等,方便开发者进 行各种操作。
跨平台
C是一种跨平台语言,可以在不 同的操作系统和硬件平台上运 行,提高了代码的可移植性。
C的应用领域
系统/应用软件
C由于其高效和可移植性, 被广泛应用于操作系统、数 据库、编译器等系统软件的 研发。
位运算符
包括&、|、~、^等 ,用于对二进制位 进行操作。
算术运算符
包括+、-、*、/等 ,用于进行数学运 算。
逻辑运算符
包括&&、||、!等, 用于进行逻辑运算 。
赋值运算符
包括=、+=、-=、 *=、/=等,用于给 变量赋值。
控制结构
switch语句
用于根据不同的值执行不同的代 码块。
while语句
பைடு நூலகம்游戏开发
C在游戏开发中具有重要地 位,许多游戏引擎和框架都 使用C进行开发。
嵌入式系统
C适合开发嵌入式系统,如 智能家居设备、工业控制系 统等。
Web开发
C在Web开发中也有应用, 如服务器端开发、高性能网 络通信等。
02
C基础语法
数据类型
用char表示,用于存储字 符。
包括float、double等,用 于存储小数。
C++考试题解答
C++测试试题
一、选择体(共50分每小题2分)
1、下列语句中错误的是( D )
A、int *p=new int(10)
B、int *p=new int[10]
C、int *p=new int
D、int *p=new int[40](0)
解题思路:
表示动态分配1个整型内存空间,初始值为10
表示动态分配10个整型内存空间;
表示动态分配1个整形内存空间
想给以个数组分配内存空间时,对数组进行初始化,这是不允许的
2、假设已经有定义“const char *const name="chen";下面的语句中正确的是( D )
[3] = 'a'
B. name = "lin"
C. name = new char[5]
D.cout<
解题思路:
Name被定义为指向常量的常指针,所以它所指的内容和本身的内容都不能修改,而“name 【3】=‘a’;修改了name所指的常量,“name=“lin”;”和“name=new char【5】;”修改了常指针,只有D输出一个字符是正确的。
3、假设已经有定义“char *const name="chen";下面的语句中正确的是( A )
[3] = 'q'
B. name = "lin"
C. name = new char[5]
D. name = new char('q')
解题思路:
Name被定义常指针,所以它所指的内容能改变,但指针本身的内容不可以修改,“name 【3】=‘q';修改了name所指向的内容,是正确的。而“name=“lin”、name=new char【5】和name=new char(’q‘);以不同的方法修改了常指针,都市错误的。
c++ 结构operator用法
c++ 结构operator用法
摘要:
1.C++结构体的基本概念
2.结构体的成员访问和修改方法
3.结构体的运算符重载
4.结构体的函数重载
5.结构体的实例
正文:
C++结构体是一种复合数据类型,它可以包含多个不同类型的成员变量。结构体主要用于存储具有多个属性的实体,例如学生的姓名、年龄、性别等。结构体在C++中是一种十分重要的数据结构,掌握好结构体的使用方法对于C++编程至关重要。
一、结构体的基本概念
结构体是一种用户自定义的数据类型,它可以包含多个成员变量。结构体定义的基本语法如下:
```
struct 结构体名
{
数据类型1 成员变量名1;
数据类型2 成员变量名2;
//...
};
```
二、结构体的成员访问和修改方法
结构体定义完成后,可以通过以下方法访问和修改结构体成员:
1.访问结构体成员:使用点运算符`.`,例如`struct 体名。成员变量名`。
2.修改结构体成员:使用赋值运算符`=`,例如`struct 体名。成员变量名= 值`。
三、结构体的运算符重载
C++中的运算符重载是一种让程序员自定义运算符行为的技术。结构体可以重载运算符`+`、`-`、`*`、`/`等,以实现对结构体成员的运算。运算符重载的语法如下:
```
struct 结构体名
{
//...
struct 结构体名operator+(const struct 结构体名& other);
struct 结构体名operator-(const struct 结构体名& other);
struct 结构体名operator*(const struct 结构体名& other);
c类与结构体的异同
c类与结构体的异同
C语言中的结构体和类是两种重要的数据类型,它们在定义和使用上有许多相似的地方,但也存在一些不同点。下面从几个方面来探讨一下C类与结构体的异同。
一、定义方式
结构体定义的方式与类的定义方式非常接近,都是通过关键字struct和class进行声明定义。但是结构体定义中没有类中的访问修饰符(public、protected、private),并且结构体的成员变量默认为public类型。
二、成员变量
C语言中的结构体和C++中的类都可以包含成员变量,但C++的类有访问限制符(public、protected、private)。而结构体中写不写关键字public、protected、private都没有影响,结构体的成员变量默认被视为公共成员。
三、成员函数
C++中的类具有自定义的成员函数,而C语言中的结构体是不支持成员函数的。不过C语言中可以使用指向函数的指针来模拟实现成员函数的效果。
四、继承
C语言中的结构体不支持继承,而C++中的类支持继承。在C++中,通过继承可以使得类之间的关系更加清晰和简单,还能够方便地实现代码复用。
五、实例化
C++中的类必须实例化成对象之后才能使用,而结构体不需要进行实例化。在C语言中,可以直接定义一个结构体变量,并且可以直接访问结构体中的成员变量。而C++中,需要通过定义一个类的对象才能使用类中的成员变量和函数。
六、运算符重载
C++中的类支持运算符重载操作,而C语言中的结构体不支持这一操作。通过运算符重载,可以使类的对象在使用运算符进行操作的时候更加的灵活和方便,提高了代码的可读性和可维护性。
c++简答题
1、什么是类?什么是对象?什么是面向对象的程序设计?
类:是指具有相同的属性和操作方法,并遵守相同规则的对象的集合。
对象:是包含现实世界物体特征的抽象实体,每个对象有内部的属性和操作方法。
面向:它吸取了面向过程的程序设计的优点,同时又考虑了现实世界和计算机处理的关系,它的整个程序由一系列相互作用的对象构成,对象之间的交互通过发送消息来实现,对象通过响应消息来实现程序的功能。
2、简要说明用面向对象的程序设计方法开发出的程序的运行过程。(9分)
运行过程:各个对象向另一些对象发送消息,对象响应消息,然后执行消息映射函数,从而实现程序的功能
3、类和结构有什么区别?(7分)
结构是类的一种特例,在结构体中也可以定义成员函数、构造函数和析构函数,成员也可使用private、protected、public。结构和类的区别是:在缺省情况下,结构中的所有成员都是公有的,而在类中是私有的。
4、向过程的程序设计和面向对象的程序设计的主要区别是什么?
面向过程的程序设计:以功能为中心,采用函数来描述,函数和操作的数据是分离的。程序由一系列的函数构成,程序的实现通过函数的顺序执行来实现。。编程时需要清楚程序实现的每一步细节。
面向对象的程序设计:它吸取了面向过程的程序设计的优点,同时又考虑了现实世界和计算机处理的关系,它的整个程序由一系列相互作用的对象构成,对象之间的交互通过发送消息来实现,对象通过响应消息来实现程序的功能。
5、面向对象的程序设计它的几个特征是什么?
它有四个基本的特征,即抽象、封装、继承和多态性。
c++ 结构体重载调用
c++ 结构体重载调用
在 C 语言中,结构体是一种重要的数据类型,它可以包含多个不同类型的数据成员。结构体重载是指在不同情况下使用同一个结构体指针来调用不同成员函数的过程。在本篇文章中,我们将介绍 C 结构体重载调用的基本概念、实现方法和应用场景。
一、结构体成员函数的重载
在 C 语言中,结构体是一种用户自定义的数据类型,它可以包含多个不同类型的数据成员。每个数据成员可以具有自己的构造函数、析构函数和赋值运算符。当我们需要为结构体定义多个不同的操作时,可以使用结构体重载技术。
重载是指在一个范围内使用相同的函数名,但具有不同的参数列表。通过这种方式,可以避免函数名冲突并使代码更加清晰易读。结构体重载是通过在不同情况下使用同一个结构体指针来调用不同成员函数的过程。
二、实现结构体重载的方法
要实现结构体重载,需要遵循以下步骤:
1. 定义结构体类型,并为其成员分配不同的操作。
2. 为每个操作编写相应的成员函数,并使用不同的参数列表进行重载。
3. 在程序中使用结构体指针来调用不同的成员函数。
下面是一个简单的示例代码,演示了如何实现结构体重载:
```c
#include <stdio.h>
// 定义一个结构体类型
struct Person {
char name[50];
int age;
double height;
};
// 定义一个构造函数,用于初始化结构体成员
void Person_init(struct Person* p) {
strcpy(p->name, "John Doe");
C程序的函数在内存的布局
C程序的函数在内存的布局
一个C程序一直以来都是由以下5个段(pieces)组成:
代码段(text segment):存放CPU执行的机器指令(machine instructions)。通常情况下,代码段是可共享的,使其可共享的目的是对于频繁被执行的程序,只需要在内存中有一份拷贝即可,比如文本编辑器(text editors),C编译器,shell等等。另外,代码段也通常是只读的,使其只读的原因是防止一个程序意外地修改了它的指令(prevent a program from accidentally modifying its instructions)。
初始化数据段/数据段(initialized data segment/data segment):该段包含了在程序中明确被初始化的变量。例如,一个不在任何函数内的C声明(C declaration)
int maxcount = 99;
使得变量maxcount根据其初始值被存储到初始化数据段。
未初始化数据段/bss段(uninitialized data segment/"bss" segment):bss这个叫法是根据一个早期的汇编运算符而来,这个汇编运算符标志着一个块的开始(stood for "block started by symbol")。在程序开始执行之前,bss段的数据被kernel初始化为0或者空指针(null pointers)。一个不在任何函数内的C声明
long sum[1000];
使得变量sum被存储到未初始化数据段/bss段中。
C++ 文档
c++
C++ logo
C++这个词在中国大陆的程序员圈子中通常被读做“C加加”,而西方的程序员通常读做“C plus plus”,“CPP”。它是一种使用非常广泛的计算机编程语言。C++是一种静态数据类型检查的、支持多重编程范式的通用程序设计语言。它支持过程化程序设计、数据抽象、面向对象程序设计、制作图标等等泛型程序设计等多种程序设计风格。
简介
C++由美国AT&T贝尔实验室的本贾尼·斯特劳斯特卢普博士在20世纪80年代初期发明并实现(最初这种语言被称作“C with Classes”带类的C)。开始,C++是作为C语言的增强版出现的,从给C语言增加类开始,不断的增加新特性。虚函数(virtual function)、运算符重载(operator overloading)、多重继承(multiple inheritance)、模板(template)、异常(exception)、RTTI、命名空间(name space)逐渐被加入标准。[1]
1998年国际标准组织(ISO)颁布了C++程序设计语言的国际标准ISO/IEC 1988-1998。C++是具有国际标准的编程语言,通常称作ANSI/ISOC++。[2]
1998年是C++标准委员会成立的第一年,以后每5年视实际需要更新一次标准。C++0x 最终国际投票已于2011年8月10日结束,并且所有国家都投出了赞成票,C++0x已经毫无疑义地成为正式国际标准。先前被临时命名为C++0x的新标准将被称为C++ 2011。C++ 2011将取代现行的C++标准ISO/IEC 14882,它公开于1998年并于2003年更新,通称C++98以及C++03。国际标准化组织于2011年9月1日出版发布ISO/IEC 14882:2011,名称是:Information technology -- Programming languages -- C++ Edition: 3。[3-4]
c++复习题(答案)
重庆交通大学电信类 15级《C++面向对象程序设计》课程复习题
(2016年 5月)
一、选择题
1. 以下说法中正确的是(B
)。
A. C++程序总是从第一个定义的函数开始执行
B. C++程序总是从main 函数开始执行
2. 下面有关构造函数的描述中,正确的是(B
A. 构造函数可以带有返回值 )。
B. 构造函数的名字与类名完全相同 D. 构造函数必须定义,不能缺省
C. 构造函数必须带有参数
3. 在声明类时,下面的说法正确的是(C
)。
A. 可以在类的声明中给数据成员赋初值
B. 数据成员的数据类型可以是register
C. private ,public ,protected 可以按任意顺序出现
D. 没有用private ,public ,protected 定义的数据成员是公有成员
4.在下面有关析构函数特征的描述中,正确的是(C
A. 一个类可以有多个析构函数 )。
B. 析构函数与类名完全相同 D. 析构函数可以有一个或多个参数
C. 析构函数不能指定返回类型
5.构造函数是在(B
)时被执行的。
A. 程序编译
B. 创建对象
C. 创建类
D. 程序装入内存
6. 下面有关静态成员函数的描述中,正确的是(B )
A. 在静态成员函数中可以使用this 指针
B. 在建立对象前,就可以为静态数据成员赋值
C. 静态成员函数在类外定义是,要用static 前缀
D. 静态成员函数只能在类外定义
7.下面有关友员函数的描述中,真确的说法是(A A. 友员函数是独立于当前类的外部函数
)
B. 一个友员函数不可以同时定义为两个类的友员函数
c和c++的区别
c和c++的区别
1、C和C++的区别
1)C是⾯向过程的语⾔,是⼀个结构化的语⾔,考虑如何通过⼀个过程对输⼊进⾏处理得到输出;C++是⾯向对象的语⾔,主要特征是“封装、继承和多态”。封装隐藏了实现细节,使得代码模块化;派⽣类可以继承⽗类的数据和⽅法,扩展了已经存在的模块,实现了代码重⽤;多态则是“⼀个接⼝,多种实现”,通过派⽣类重写⽗类的虚函数,实现了接⼝的重⽤。
2)C和C++动态管理内存的⽅法不⼀样,C是使⽤malloc/free,⽽C++除此之外还有new/delete关键字。
3)C++⽀持函数重载,C不⽀持函数重载
4)C++中有引⽤,C中不存在引⽤的概念
2、C++中指针和引⽤的区别
1)指针是⼀个新的变量,存储了另⼀个变量的地址,我们可以通过访问这个地址来修改另⼀个变量;
引⽤只是⼀个别名,还是变量本⾝,对引⽤的任何操作就是对变量本⾝进⾏操作,以达到修改变量的⽬的
2)引⽤只有⼀级,⽽指针可以有多级
3)指针传参的时候,还是值传递,指针本⾝的值不可以修改,需要通过解引⽤才能对指向的对象进⾏操作
引⽤传参的时候,传进来的就是变量本⾝,因此变量可以被修改
3、结构体struct和共同体union(联合)的区别
结构体:将不同类型的数据组合成⼀个整体,是⾃定义类型
共同体:不同类型的⼏个变量共同占⽤⼀段内存
1)结构体中的每个成员都有⾃⼰独⽴的地址,它们是同时存在的;
共同体中的所有成员占⽤同⼀段内存,它们不能同时存在;
2)sizeof(struct)是内存对齐后所有成员长度的总和,sizeof(union)是内存对齐后最长数据成员的长度、
C语言(C99标准)在结构体的初始化上与C++的区别
C语⾔(C99标准)在结构体的初始化上与C++的区别
C++中由于有构造函数的概念,所以很多时候初始化⼯作能够很⽅便地进⾏,⽽且由于C++标准库中有很多实⽤类(往往是类模板),现代C++能⼗分容易地编写。
⽐如现在要构造⼀个类Object,包含两个字段,⼀个为整型,⼀个为字符串。C++的做法会像下⾯这样
#include <stdio.h>
#include <string>
struct Object
{
int i;
std::string s;
Object(int _i, const char* _s) : i(_i), s(_s) { }
};
int main()
{
Object obj(1, "hello");
printf("%d %s\n", obj.i, obj.s.c_str());
return 0;
}
这样的代码简洁、安全,C++通过析构函数来实现资源的安全释放,string的c_str()⽅法能够返回const char*,⽽这个字符串指针可能指向⼀⽚在堆上动态分配的内存,string的析构函数能够保证string对象脱离作⽤域被销毁时,这段内存被系统回收。
string真正实现较为复杂,它本⾝其实是类模板basic_string的实例化,⽽且basic_string⾥⾯的类型都是⽤type_traits来进⾏类型计算得到的类型别名,通过模板参数CharT(字符类型)不同,相应的值也不同,但都是通过模板的⼿法在编译期就计算出来。⽐如字符类型CharT可以是char、char16_t、char32_t、wchar_t,对应的类模板实例化为string、u16string、u32string、wstring,共享类模板basic_string的成员函数来进⾏字符串操作。
新《C++程序设计》自考必备题库(含答案)
新《C++程序设计》自考必备题库(含答案)
一、单选题
1、类A将每其它类对象作为成员,则建立A类对象时,下列描述正确的是()
A、A类构造函数先执行
B、成员构造函数先执行
C、两者并行执行
D、不能确定
正确答案:B
2、列描述错误的是()
A、在创建对象前,静态成员不存在
B、静态成员是类的成员
C、静态成员不能是虚函数
D、静态成员函数不能直接访问非静态成员
正确答案:A
3、关多态性说法不正确的是()
A、C++语言的多态性分为编译时的多态性和运行时的多态性
B、编译时的多态性可通过函数重载实现
C、运行时的多态性可通过模板和虚函数实现
D、实现运行时多态性的机制称为动态多态性
正确答案:C
4、编译指令中,宏定义使用哪个指令()
A、ttinclude
B、#define
C、#if
D、#else
正确答案:B
5、于对象概念的描述中,说法错误的是()
A、对象就是C语言中的结构体
B、对象代表着正在创建的系统中的一个实体
C、对象是类的一个变量
D、对象之间的信息传递是通过消息进行的
正确答案:A
6、没有使用private关键字定义类的数据成员,则默认为()
A、private
B、public
C、protected
D、friend
正确答案:A
7、符型数据在内存中的二进制编码方式是()
A、补码
B、原码
C、ASCII码
D、反码
正确答案:C
8、++语言是从早期的C语言逐渐发展演变而来的与C语言相比,它在求解问题方法上进行的最大改进是:()
A、面向过程
B、面向对象
C、安全性
D、复用性
正确答案:B
9、符串“ABC”在内存占用的字节数是()
c++ 结构体构造函数
c++ 结构体构造函数
C++中的结构体构造函数是指在创建结构体对象时自动调用的特殊函数,用于初始化结构体的成员变量。结构体构造函数的语法与类的构造函数相同,但结构体构造函数不能有访问控制符,也不能继承。
结构体构造函数的定义格式如下:
struct 结构体名{
成员变量类型成员变量名1;
成员变量类型成员变量名2;
……
结构体名(参数列表){
//构造函数体
}
};
在结构体构造函数中可以对结构体的成员变量进行初始化,也可以调用其他函数进行初始化,例如:
#include<iostream>
using namespace std;
struct student{
string name;
int age;
student(string n,int a){
name=n;
age=a;
}
void display(){
cout<<'姓名:'<<name<<endl;
cout<<'年龄:'<<age<<endl;
}
};
int main(){
student s('张三',20);
s.display();
return 0;
}
输出结果为:
姓名:张三
年龄:20
结构体构造函数也可以重载,即定义多个构造函数,以便在创建结构体对象时可以按不同的方式对成员变量进行初始化。
总之,在C++中,结构体构造函数是一种非常重要的初始化机制,可以方便地对结构体的成员变量进行初始化,提高程序的效率与可读性。
2010-2011第二学期_C++程序设计_复习题
《C++程序设计》复习题
一、基础知识
1、面向对象程序设计把数据和(对数据的操作)封装在一起。
2、C++源程序的扩展名是(.cpp )。
3、C++源程序要经过__编辑_____、__编译_______、____连接____和____运行_____四个环节,才能在屏幕上显示结果。
4、下列说法不正确的是(B )。
A. 函数是构成C++程序的基本元素
B. 程序总是从第一个定义的函数开始执行
C. main函数是C++程序中不可缺少的函数
D. 在函数调用之前,必须要进行函数的定义或声明
5、以下函数声明正确的是()。
A. double fun(int a,int b)
B. double fun(int a;int b)
C. double fun(int a,int b);
D. double fun(int a, b);
6、如果一个函数没有返回值时,函数的类型应为(void )。
7、下列关于重载函数的说法正确的是( C )。
A. 重载函数的返回值类型必须互不同
B. 重载函数形参个数必须不同
C. 重载函数必须具有不同的形参列表
D. 重载函数名不能相同
8、C++中引用数组元素时,其数组下标的数据类型允许是(整型常量或整形表达式)。
9、C++程序中的关系运算符满足条件时返回____1____,不满足条件时返回____0____。
10、在C++中二维数组的存放顺序为_先行后列的顺序______________。
11、下列数组说明和初始化正确的是( D )。
A. int a[5]=0;
B. int b[3]={1,2,3,4};
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
#include
# define N 3
struct Student
{ int num ;
char name[20];
float score[3];
float aver;
};
int main()
{
void input(struct Student stu[]);
void printf(struct Student stu[]);
struct Student stu[N],*p=stu;
input(p);
printf(p);
getchar();
return 0;
}
void printf(struct Student stu[])
{
for(int i=0;i
printf("学号:%d\n姓名:%s\n三门课成绩:%5.1f,%5.1f,%5.1f\n平均成绩:%6.2f\n",stu[i].num,stu[i].name,stu[i].score[0],stu[i].score[1],stu[i].score[2],stu[i].aver);
printf("\n");
}
}
void input(struct Student stu[])
{int i;
printf("请输入各学生的信息: 学号,姓名,三门课成绩:\n");
for(i=0;i
stu[i].aver=(stu[i].score[0]+stu[i].score[1]+stu[i].score[2])/3.0;
}
}