当前位置:首页 » 编程语言 » c语言定义类模板
扩展阅读
webinf下怎么引入js 2023-08-31 21:54:13
堡垒机怎么打开web 2023-08-31 21:54:11

c语言定义类模板

发布时间: 2022-11-18 16:06:07

A. 在c语言中类成员,函数重载,继承,派生类,类模板怎么定义。

C语言中没有类的概念,C++中才有类,有类成员变量,成员函数,对象,以及重载,继承,派生的概念;
函数的重载是指在同一个类中具有相同的函数名,但是可能函数的返回值类型,或者形参个数,或者形参类型不同;
派生是指基类跟子类的关系:例如class
A:public
B;类A共有继承B;
呵呵,这些东西需要你慢慢看,注意重载
跟覆盖的区别以及与虚函数之间的关系,等等
至于类模板,就是你定义一个类,而不指定数据类型,关键字template,等到后面的开发中你可以实际根据需要实例化为你想要的
类型,例如int
,char,struct
等等

B. 在c语言中如何实现函数模板

各种用
C
语言实现的模板可能在使用形式上有所不同。现以一个求和函数
Sum
为例,用
C++
Template
可写如下:
template
R
Sum(const
T
*array,
int
n)
{
R
sum
=
0;
for
(int
i
=
0
;
i
<
n
;
++i)
sum
+=
i;
return
sum;
}
如果不是内置类型,该模板隐式地需要
有R
R::operator+=(T)运算符可用。
1.
使用函数指针作为
Functor
替换者
Typedef
struct
tagAddClass
{
Void
(*add)(char*
r1,
const
char*
r2);
Int
elemSize;
Char
sum[MAX_ELEM_SIZE];
}
AddClass;
void
Sum(AddClass*
self,
const
char*
array,
int
n)
{
for
(int
i
=
0
;
i
<
n
;
++i)
self->add(self->sum,
array
+
i*self->elemSize);
}
使用时:
Void
AddInt(char*
r1,
const
char*
r2)
{
*(long*)r1
+=
*(int*)r2;
}
AddClass
addClass
=
{AddInt,
2,
0
};
Int
array[100];
Read(array);
Sum(&addClass,
array,
100);
…..
2.
用宏作为Functor的替换者
#define
GenSumFun(SumFunName,
Add,
RetType,
ElemType)
RetType
SumFunName
(const
ElemType
*array,
int
n)
\
{
RetType
sum
=
0;
for
(int
i
=
0
;
i
<
n
;
++i)
Add(sum,
i);
return
sum;
}
使用时:
#define
AddInt(x,
y)
((x)
+=
(y))
GenSumFun(SumInt,
AddInt,
long,
int)
…..
Int
array[100];
Read(array);
Long
sum
=
SumInt(array,
100);
…..
3.
所有可替换参数均为宏
至少需要一个额外的文件(实现文件)为
impsum.c
/*
impsum.c
*/
RetType
FunName(const
ElemType
*array,
int
n)
{
RetType
sum
=
0;
for
(int
i
=
0
;
i
<
n
;
++i)
Add(sum,
i);
return
sum;
}
使用时:
#undef
RetType
#undef
FunName
#undef
ElemType
#undef
Add
#define
AddInt(x,
y)
((x)
+=
(y))
#define
RetType
long
#define
FunName
SumInt
#define
ElemType
int
#define
Add
AddInt
#include
impsum.c
…..
Int
array[100];
Read(array);
Long
sum
=
SumInt(array,
100);
4.
总结:
第一种方法,易于跟踪调试,但是效率低下,适用于对可变函数(函数指针)的效率要求不高,但程序出错的可能性较大(复杂),模板函数(Sum)本身很复杂,模板参数也比较复杂(add)的场合。
第二种方法,效率高,但很难跟踪调试,在模板函数和模板参数本身都很复杂的时候更是如此。
第三种方法,是我最近几天才想出的,我认为是最好的,在模板参数(Add)比较复杂时可以用函数(第二种也可以如此),简单时可以用宏,并且,易于调试。在模板函数本身很复杂,而模板参数比较简单时更为优越。但是,可能有点繁琐。

C. 在C语言中类成员,函数重载,继承,派生类,类模板怎么定义。

C语言中没有类的概念,C++中才有类,有类成员变量,成员函数,对象,以及重载,继承,派生的概念;
函数的重载是指在同一个类中具有相同的函数名,但是可能函数的返回值类型,或者形参个数,或者形参类型不同;
派生是指基类跟子类的关系:例如class A:public B;类A共有继承B;
呵呵,这些东西需要你慢慢看,注意重载 跟覆盖的区别以及与虚函数之间的关系,等等
至于类模板,就是你定义一个类,而不指定数据类型,关键字template,等到后面的开发中你可以实际根据需要实例化为你想要的 类型,例如int ,char,struct 等等

D. C语言程序编写

C语言使用 Xcode。Xcode 是由Apple官方开发的IDE,支持C、C++、Objective-C、Swift等

E. 模板的定义有哪些

模板,是指作图或设计方案的固定格式,有时也指DNA复制或转录时,用来产生互补链的核苷酸序列。模板是将一个事物的结构规律予以固定化、标准化的成果,它体现的是结构形式的标准化。

分子生物学:模板为核酸中的碱基序列,它可用作DNA或RNA互补链合成的基础。

理论免疫学:是指决定抗体分子结合部位构型的抗原。

遗传学:是指一条DNA单链,是合成RNA互补链或mRNA的模板,又是合成核酸或蛋白质的模板。

网络:在ASP.NET中:一个声明性页段落,用于为模板化的 ASP.NET 服务器控件提供可视化界面。模板包含表示元素,这些元素包括文本文字、HTML 和数据绑定表达式,以及表示 ASP.NET服务器控件的声明性语法元素。模板可以作为带有 .ascx 扩展名的文本文件持续。

工业:指生产、合成重复产物的模子。

建筑:formwork混凝土结构或钢筋混凝土结构成型的模具,由面板和支撑系统(包括龙骨、桁架、小梁等,以及垂直支承结构)、连接配件(包括螺栓、联结卡扣、模板面与支承构件以及支承构件之间联结零、配件)组成。

模板按材料分为:钢模板,竹胶板,木模板,塑胶板。

竹胶板一般都是一次性的,而其他模板则可以刷上脱模剂、模板漆,以此延长模板的寿命,浇注出高质量的墩柱。

模板按其功能分五大类:定型组合模板、一般木模板+钢管(或木立柱支撑)、墙体大模板、飞模(台模)、滑动模板。

Microsoft Office办公软件:模板是指一个或多个文件,其中所包含的结构和工具构成了已完成文件的样式和页面布局等元素。例如,Word 模板能够生成单个文档,而 FrontPage 模板可以形成整个网站。

面向对象程序设计:模板是建立通用的与数据类型无关的算法的重要手段。C++国际标准ISO14882将模板正式引入标准库,要求用模板类取代传统C++中定义的类。

网站:在网上都会有各类网站管理系统提供下载,例如用PHP语言编写的织梦网站管理系统,再或者ASP语言编写的动易、新云等,大家可以通过这些网站管理系统轻松架设网站,这些网站都有自己的模板,叫网站管理系统模板,简称“网站模板”。

集散控制系统(DCS),moleDCS内,较模块大的模件,叫做模板。

编辑模板编辑

概述

模板就是一个类型的词条该包含的基本结构和内容。例如,一个地区类的词条,内容中应该包括“历史(地区建立的时间和发生的事件等)、地理(包括气候、山脉、河流等),经济(包括工业、进出口贸易等等)、人口情况(包括人口数量、主要民族等)、文化(包括语言和特色文化等)等等。

作用

模板的作用就是告诉编辑者,这个类型的词条基本的结构应该包含哪几部分(当然并不是必须的)。如果您发现某个词条的结构不完整,就可以从完善这些部分入手。从而使得编辑词条有章可循。

形成原因

如今我们已经总结出来的模板包括:学校、计算机病毒、城镇、菜谱、植物、动物、动漫、影视、民族、朝代、历史事件、唐诗、宋词、成语。

F. 什么是C语言设计模板结构

应该不是C吧,只有C++才支持模板,题目的意思就是要你用模板类来设计这个管理系统。
比如你的程序可能会用到链表存储结构,这个链表类就可以是一个模板类,代入学生类这个类型,就成了具体的用于存储学生信息的链表类了。

G. 在c语言中如何实现函数模板

如果要写个函数支持多种数据类型,首先想到的就是C++的模板了,但是有时候只能用C语言,比如在linux内核开发中,为了减少代码量,或者是某面试官的要求…
考虑了一阵子后,就想到了qsort上.qsort的函数原型:
void qsort( void *base, size_t num, size_t width, int (__cdecl *compare )(const void *elem1, const void *elem2 ) );
快排时,只要自己实现相应数据类型的比较函数cmpare就可以了.如果比较int型时,一个典型的compare函数如下:

那么,就是说可以利用void *. void *意指未指定类型,也可以理解为任意类型。其他类型的指针可以直接赋值给void *变量,但是void *变量需要强制类型转换为其它指针类型。这个相信大家都知道。那么下面以一个简单的题目为例,来探讨如何在C语言中实现模板函数。
方法1: 利用void *.
在看下面的源程序之前,需要了解几点。首先,在32位平台上,任何类型的指针所占的字节都是4个字节,因为32位机器虚拟内存一般为4G,即2的32次方,只要32位即4个字节就可以足够寻址,sizeof(void *)=4; 其次,虽然各种不同类型的指针所占的空间都为4个字节,但是不同类型的指针所指的空间的字节数却不同(这一点尤为重要,下面的程序我在开始没有调通就因为这点意识不强)。所以,如果你将一个指针强制转换为另一个类型的指针,指针本身所占的字节是不变的,但是,如果对这个指针进行运算,比如 *p,p++,p-=1等一般都是不同的。 再次,函数指针应该了解下,这里不多说。 最后,因为Sandy跟我说,C++开始的时候模板的实现其实就是利用宏替换,在编译的时候确定类型。所以,为了方便,类型也用了预编译指令#define。

<span>#include"stdio.h"</span>

<span>#include"stdlib.h"</span>

<span>//typedefintT;//或者下面的也可以.</span>

<span>#defineTint</span>

//这个FindMin是Sandy写的.felix021也写了个,差不多的就不贴出来的.

voidFindMin(constvoid*arr,intarr_size,intarrmembersize,int*index,

int(*cmp)(constvoid*,constvoid*b)){

inti;

*index=0;

char*p=(char*)arr;

char*tmp=p;

for(i=1;i<arr_size;i++){

if(cmp(tmp,p)>0){

tmp=p;

}

p+=arrmembersize;

}

(*index)=((int)(tmp-arr))/arrmembersize;

}

*/</span>

可以把指针看作是char*,如果转换为int*,那下面的位移就不正确了.</span>

index<span>=</span>i<span>;</span>

<span>}</span>

<span>}</span>

<span>return</span>index<span>;</span>

<span>}</span>

<span>int</span>result<span>;</span><span>//result保存的是最小值索引.</span>

result<span>=</span>FindMin<span>(</span>arr,<span>12</span>,

H. C语言的类怎么定义

C++才有类,用class关键字定义。

I. c++模板概念是什么详细点

有以下这样3个求加法的函数:
int Add(int x,int y)
{
return x+y;
}

double Add(double x,double y)
{
return x+y;
}

long Add(long x,long y)
{
return x+y;
}
它们拥有同一个函数名,相同的函数体,却因为参数类型和返回值类型不一样,所以是3个完全不同的函数。即使它们是二元加法的重载函数,但是不得不为每一函数编写一组函数体完全相同的代码。如果从这些函数中提炼出一个通用函数,而它又适用于多种不同类型的数据,这样会使代码的重用率大大提高。那么 C++的模板就可解决这样的问题。模板可以实现类型的参数化(把类型定义为参数),从而实现了真正的代码可重用性。C++中的模板可分为函数模板和类模板,而把函数模板的具体化称为模板函数,把类模板的具体化成为模板类。

J. C语言结构体定义

结构体的定义如下所示,struct为结构体关键字,tag为结构体的标志,member-list为结构体成员列表,其必须列出其所有成员;variable-list为此结构体声明的变量。在一般情况下,tag、member-list、variable-list这3部分至少要出现2个。

结构体的成员可以包含其他结构体,也可以包含指向自己结构体类型的指针,而通常这种指针的应用是为了实现一些更高级的数据结构如链表和树等。如果两个结构体互相包含,则需要对其中一个结构体进行不完整声明。

(10)c语言定义类模板扩展阅读:

一、结构体作用:

结构体和其他类型基础数据类型一样,例如int类型,char类型,只不过结构体可以做成你想要的数据类型,以方便日后的使用。

在实际项目中,结构体是大量存在的,研发人员常使用结构体来封装一些属性来组成新的类型。由于C语言内部程序比较简单,研发人员通常使用结构体创造新的“属性”,其目的是简化运算。

结构体在函数中的作用不是简便,其最主要的作用就是封装。封装的好处就是可以再次利用。让使用者不必关心这个是什么,只要根据定义使用就可以了。

二、结构体的大小与内存对齐:

结构体的大小不是结构体元素单纯相加就行的,因为我们主流的计算机使用的都是32bit字长的CPU,对这类型的CPU取4个字节的数要比取一个字节要高效,也更方便。

所以在结构体中每个成员的首地址都是4的整数倍的话,取数据元素时就会相对更高效,这就是内存对齐的由来。每个特定平台上的编译器都有自己的默认“对齐系数”(也叫对齐模数)。

程序员可以通过预编译命令#pragma pack(n),n=1,2,4,8,16来改变这一系数,其中的n就是你要指定的“对齐系数”。

三、结构体的规则:

1、数据成员对齐规则:结构(struct)(或联合(union))的数据成员,第一个数据成员放在offset为0的地方,以后每个数据成员的对齐按照#pragma pack指定的数值和这个数据成员自身长度中,比较小的那个进行。

2、结构(或联合)的整体对齐规则:在数据成员完成各自对齐之后,结构(或联合)本身也要进行对齐,对齐将按照#pragma pack指定的数值和结构(或联合)最大数据成员长度中,比较小的那个进行。

3、结合1、2可推断:当#pragma pack的n值等于或超过所有数据成员长度的时候,这个n值的大小将不产生任何效果。