精华内容
下载资源
问答
  • C语言实现类

    2017-11-02 20:10:24
    C语言实现类的封装、继承和多态,基类、派生类、结构体实现类
  • 多年以来,C语言在嵌入式软件开发中被广泛使用,但由于开发人员和应用场景等原因,面向对象、设计模式等优秀的软件开发...文章以类的封装特性为切入点,结合C语言的特性,讨论了C语言实现类封装的方法,并给出了实例。
  • 多年以来,C语言在嵌入式软件开发中被广泛使用,但由于开发人员和应用场景等原因,面向对象、设计模式等优秀的软件开发方法始终没有很好地运用起来。...文章结合C语言的特性,对使用C语言实现类实例化进行了讨论。
  • C语言实现类封装的研究.pdf
  • C语言实现类实例化的研究.pdf
  • 附件是在VS2012下用C语言实现面向对象的示例代码,并实现设计模式中的工厂模式
  • C语言实现类效果

    千次阅读 2018-08-01 13:56:22
    C语言实现类的继承 C语言如何实现类的效果? 结构体跟类是一种比较类似的结构,都对成员进行了一定程度的封装。区别在于,结构体的成员默认是public,类的成员默认是private。 .h文件 #ifdef __cplusplus /...

    【C语言】实现类的继承

    C语言如何实现类的效果?

    结构体跟类是一种比较类似的结构,都对成员进行了一定程度的封装。区别在于,结构体的成员默认是public,类的成员默认是private。

    .h文件

    #ifdef __cplusplus  //******  ADD
    extern "C" {        //******  ADD
    #endif              //******  ADD
    
    #ifdef BCCWIN
    
    #ifdef DOEXPORT
    #define EXPORTSPEC __declspec (dllexport)
    #else
    #define EXPORTSPEC __declspec (dllimport)
    #endif
    
    EXPORTSPEC HANDLE __stdcall setPort(char * name, char* baud,char parity);
    
    EXPORTSPEC int __stdcall closePort(HANDLE port);
    #endif
    
    //#ifdef __cplusplus  //******  REMOVE moved to top
    //extern "C" {        //******  REMOVE moved to top
    //#endif              //******  REMOVE moved to top
    
    #define LINUX
    
    #ifdef LINUX
    
    typedef struct ppi{
    	long a,b,c,e;
        int int_a;
        int res;
        float d;
        bool isSucceed;
        daveInterface * di;
        daveConnection * dc;
        _daveOSserialType fds;
        void (*ReadBytes)(struct ppi this,int area,int para1,int para2 ,int para3,int *CopyToBuffer);
        void (*WriteBytes)(struct ppi this,int area,int para1,int para2,int para3,int *theAreaOfValue);
    }ppi;
    
    
    void ReadBytes(struct ppi this,int area ,int para1,int para2,int para3,int *CopyToBuffer);
    
    void WriteBytes(struct ppi this,int area ,int para1,int para2,int para3,int *theAreaOfValue);
    
    ppi *NewPPI(ppi *this);
    #endif
    
    #ifdef __cplusplus
    }
    #endif

    .c文件

    #include<stdlib.h>
    #include<stdio.h>
    #include<stdbool.h>
    #include"nodavesimple.h"
    #include"setport.h"
    #include"ppi.h"
    
    void ReadBytes(struct ppi this,int area ,int para1,int para2,int para3,int *CopyToBuffer){
    	if(this.isSucceed){
    	//	printf("",);
    		this.res = daveReadBytes(this.dc,area,para1,para2,para3,CopyToBuffer);
    		printf("res=%d\n",this.res);
    		this.int_a = daveGetU16(this.dc);
    	    	printf("U16:0x%X\n",this.int_a);
    
    	}else{
    		printf("error!could not open serial port /dev/ttyUSB0 \n");
    	}
    }
    
    void WriteBytes(struct ppi this,int area ,int para1,int para2,int para3,int *theAreaOfValue){
    	if(this.isSucceed){
    		printf("Write\n");
    		this.res = daveWriteBytes(this.dc,area,para1,para2,para3,theAreaOfValue);
    	}else{
    		printf("error!could not open serial port /dev/ttyUSB0 \n");
    	}
    }
    
    ppi *NewPPI(ppi *this){
    //	(this->fds).rfd = serPort("/dev/ttyUSB0","9600",'E');
    //	(this->fds).wfd = (this->fds).rfd;
    	if((this->fds).rfd>0){
    		this->isSucceed = true;
    		this->di =daveNewInterface(this->fds, "IF1", 0, daveProtoPPI, daveSpeed187k);
    		this->dc =daveNewConnection(this->di, 2, 0, 0);  
    		daveConnectPLC(this->dc);
    	}else{
    		this->isSucceed = false;
    	}
    	this->ReadBytes = ReadBytes;
    	this->WriteBytes = WriteBytes;
    }
    
    
    
    

    【C语言】实现类的继承

    展开全文
  • C语言实现类的继承

    千次阅读 2018-08-03 16:04:39
    [C语言]实现类效果 C语言是利用结构体来实现类的效果的。当然,跟类还是有不同,在C++中类的成员属性默认是私有(private)的,而结构体是公开的(public)。 那么应该如何实现类的继承效果呢?我们可以利用结构体嵌套...

    [C语言]实现类效果

    C语言是利用结构体来实现类的效果的。当然,跟类还是有不同,在C++中类的成员属性默认是私有(private)的,而结构体是公开的(public)。

    那么应该如何实现类的继承效果呢?我们可以利用结构体嵌套来实现,将”父类“当作”子类“的一部分,那可不就是继承了吗?

    #include<stdio.h>
    typedef struct A{
    	int a;
    }A;
    typedef struct B{
    	struct A B_A;
    }B;
    int main(){
    	B b;
    	b.B_A.a = 10;
    	printf("%d\n",b.B_A.a);
    }
    //输出结果为10

    现在写一个继承[C语言]实现类效果中ppi类的例子,此处对ppi类中形参“struct ppi this”修改成了“struct ppi *this”,以解决参数类型不匹配问题。

    connect.h

    #ifdef __cplusplus  //******  ADD
    extern "C" {        //******  ADD
    #endif              //******  ADD
    
    #define LINUX
    
    #ifdef LINUX
    typedef struct connect{
    	int protocol_read;
    	int protocol_write;
    	struct ppi *PPI;
    	void (*Read)(struct connect this,int area,int para1,int para2,int para3);
    	void (*Write)(struct connect this,int area,int para1,int para2,int para3,int *value);
    }connect;
    
    
    
    connect *NewConnect(connect *this);
    void Read(struct connect this,int area,int para1,int para2,int para3);
    void Write(struct connect this,int area,int para1,int para2,int para3,int *value);
    #endif
    
    #ifdef __cplusplus
    }
    #endif

    connect.c

    #include<stdlib.h>
    #include<stdio.h>
    #include<stdbool.h>
    #include"nodavesimple.h"
    #include"setport.h"
    #include"ppi.h"
    #include"protocol.h"
    
    
    
    
    connect *NewConnect(connect *this){
    	this->protocol_read = 0;
    	this->protocol_write = 0;
    }
    
    void Read(struct connect this,int area,int para1,int para2,int para3){
    	switch(this.protocol_read){
    	case 0:
    		printf("para 'protocol_read' ERROR!\n");
    		break;
    	case 1:
    		this.PPI = (struct ppi*)malloc(sizeof(struct ppi));
    		NewPPI(this.PPI);
    		ReadBytes(this.PPI,area,para1,para2,para3,NULL);
    		free(this.PPI);
    		break;
    	default:
    		printf("this protocol is not support!\n");
    		break;
    	}
    }
    
    void Write(struct connect this,int area,int para1,int para2,int para3,int *value){
    	switch(this.protocol_write){
    	case 0:
    		printf("para 'protocol_read' ERROR!\n");
    		break;
    	case 1:
    		this.PPI = (struct ppi*)malloc(sizeof(struct ppi));
    		NewPPI(this.PPI);
    		WriteBytes(this.PPI,area,para1,para2,para3,value);
    		free(this.PPI);
    		break;
    	default:
    		printf("this protocol is not support!\n");
    		break;
    	}	
    }
    
    
    
    /*
    int main(){
    	ppi PPI;
    	NewPPI(&PPI);	
    	int a = 0x2F;
    //	PPI.WriteBytes(PPI,daveOutputs,0,0,1,&a);
    	PPI.ReadBytes(PPI,daveOutputs,0,0,2,NULL);
    	return 0;
    }//use to test ppi class && need delete protocol.h
    
    */

     

    展开全文
  • C语言实现模板的一些个人思路

    千次阅读 2019-09-25 14:09:24
    C语言实现模板的一些个人思路 0. FAQ Q: 为什么要用模板? A: 为了解决函数重载问题。例如,在C++中,我们要比较两个int型变量的哪个大,并返回其中较大的值,可能会写这样的函数 int Max(int a, int b) { ...

    用C语言实现模板类的一些个人思路

    0. FAQ

    • Q: 为什么要用模板?
    • A: 为了解决函数重载问题。例如,在C++中,我们要比较两个int型变量的哪个大,并返回其中较大的值,可能会写这样的函数:
    int Max(int a, int b) { return a > b ? a : b; }
    int main() {
        printf("%d\n", Max(123, 456));
        return 0;
    }
    

    但是,如果我们还要比较更多的类型,例如char型,double型之类的,我们都需要重新写一个类似的实现,这很不方便:

    char Max(char a, char b) { return a > b ? a : b; }
    double Max(double a, double b) { return a > b ? a : b; }
    int main() {
        printf("%c, %lf\n", Max('a', 'z'), Max(1.1, 2.2));
        return 0;
    }
    

    这个时候我们可以考虑使用模板来简化代码:

    template <typename T>
    T Max(T a, T b) { return a > b ? a : b; }
    int main() {
        printf("%d, %c, %lf\n", Max(123, 456), Max('a', 'z'), Max(1.1, 2.2)); 
        return 0;
    }
    

    • Q: C能重载?
    • A: 不能,C只能像这样子:
    int Max_int(int a, int b) { return a > b ? a : b; }
    char Max_char(char a, char b) { return a > b ? a : b; }
    double Max_double(double a, double b) { return a > b ? a : b; }
    int main() {
        printf("%d, %c, %lf\n", Max_int(123, 456), Max_char('a', 'z'), Max_double(1.1, 2.2));
        return 0;
    }
    

    • Q: 道理我都懂,有C++了,为什么还要用C实现模板?
    • A: 虽然一般情况下都能直接写C++来代替C程序啦,不过确实存在无法使用C++的场合。很不幸,我工作所用的语言只能是C,于是,之前用惯了C++的我决定探索一下如何用C实现模板- -+

    1. 目前个人写法风格

    1.0 模板函数

    首先,用前面的Max函数为例,先看一下我目前的写法风格吧:-P

    需要注意的是:为防止宏嵌套出错,例如_Max(Pair(int, char))会被拓展成Max$_Pair(int, char)_$这样的不合法变量名(Pair的定义见1.1模板类示例),我们都需要多写一个类似于#define Max(T) _Max(T)这样的操作

    #define _Max(T) Max$_##T##_$
    #define Max(T) _Max(T)
    
    #define _Max_IMPL(T) T Max(T)(T a, T b) { return a > b ? a : b; }
    #define Max_IMPL(T) _Max_IMPL(T)
    
    Max_IMPL(int);
    Max_IMPL(char);
    Max_IMPL(double);
    
    int main() {
        printf("%d, %c, %lf\n", Max(int)(123, 456), Max(char)('a', 'z'), Max(double)(1.1, 2.2));
        return 0;
    }
    

    下面解释一下上面的代码到底做了什么:

    • 用宏来模仿C++的写法 —— #define _Max(T) Max$_##T##_$
      这里用了Max(T)宏来模仿C++的Max<T>写法。

      例如:Max(int),宏拓展后实际上等于Max$_int_$$符号确实是合法变量名),这里用$_表示C++中模板的尖括号左侧<,用_$表示尖括号右侧>

    • 模板实现 —— #define _Max_IMPL(T) T Max(T a, T b) { return a > b ? a : b; }
      相当于C++的template <typename T> T Max(T a, T b) { return a > b ? a : b; }

    • 实例化模板 —— Max_IMPL(int);
      由于C不是C++,所以需要使用者自己去实例化对应的模板类型,此处宏拓展出来的代码为int Max(int)(int a, int b) { return a > b ? a : b; },然后Max(int)再拓展为Max$_int_$,于是最终结果为:
      int Max$_int_$(int a, int b) { return a > b ? a : b; }

    • 使用 —— Max(int)(123, 456)
      相当于C++的Max<int>(123, 456)

    像这样,我们就实现了一个T Max<T>(T, T)模板函数了!在此基础上,我们可以更进一步:如果能做一个检测代码中Max使用了哪些模板类型,然后在编译前自动添加实现Max_IMPL(…)完成“实例化”的程序,就可以完成类似于C++的模板类型推断功能了- -+


    1.1 模板类

    模板类同理,我们以简单的Pair为例(保存两个类型数据的结构)

    #define _Pair(T1, T2) Pair$_##T1##_$$_##T2##_$
    #define Pair(T1, T2) _Pair(T1, T2)
    
    #define _Pair_IMPL(T1, T2) typedef struct { T1 t1; T2 t2; } Pair(T1, T2)
    #define Pair_IMPL(T1, T2) _Pair_DEF(T1, T2)
    
    Pair_IMPL(int, char);
    Pair_IMPL(int, double);
    
    int main() {
        Pair(int, char) p_ic;
        Pair(int, double) p_id;
        p_ic.t1 = 123;
        p_ic.t2 = 'a';
        p_id.t1 = 456;
        p_id.t2 = 1.1;
        return 0;
    }
    
    • #define _Pair(T1, T2) Pair$_##T1##_$$_##T2##_$
      Pair(T1, T2)模仿C++中Pair<T1, T2>的写法
    • #define _Pair_IMPL(T1, T2) typedef struct Pair(T1, T2) { T1 t1; T2 t2; } Pair(T1, T2)
      相当于template<typename T1, typename T2> struct Pair{ T1 t1; T2 t2; }
    • Pair_IMPL(int, char);
      实例化Pair<int, char>,此处宏拓展的最终结果为:
      typedef struct { int t1; char t2; } Pair$_int_$$_char_$
    • Pair(int, char) p_ic;
      相当于Pair<int, char> p_ic;

    像这样,我们就完成了简单的Pair<T1, T2>模板类了


    个人项目(完善中):https://github.com/NumbFish-Luo/NfLib
    参考资料:C语言宏高级用法 https://www.cnblogs.com/alantu2018/p/8465911.html

    展开全文
  • C语言实现卷积.docx

    2020-03-29 06:20:48
    用一编程语言实现卷积 本次作业我采用的是C语言来编程实现卷积 C语言卷积实现的代码 里面含有运行结果图
  • C语言实现C++ 中的

    万次阅读 2017-03-11 21:58:09
    华科复试面试题:C语言如何实现C++ 中的 #include <stdio.h> //C 语言没有,但可以用结构体充当一个 //与不同,结构体只能定义变量,不能够定义函数,可以通过函数指针的方法来实现其功能 //定义...

    华科复试面试题:C语言如何实现C++ 中的类

    #include <stdio.h>
    //C 语言没有类,但可以用结构体充当一个类
    //与类不同,结构体只能定义变量,不能够定义函数,可以通过函数指针的方法来实现其功能 
    //定义“类 ”的成员变量以及方法 
    typedef struct Person{
    	char name;
    	int age;
    	void (*EatFunction)(struct Person this, int num);
    }Person; 
    
    //定义函数功能 
    void EatFunction(struct Person this, int num){
    	printf("Test\n");
    } 
    
    //定义“类 ”的构造函数
    //与面向对象不同,C语言的“类”的 构造函数不能放在“类”中,只能放在“类”外
    //构造函数主要完成 变量的初始化,以及函数指针的赋值 
    Person *NewPerson(Person *this){
    	this->name = 'A';
    	this->age = 18;
    	this->EatFunction = EatFunction;
    } 
    
    //主函数调用 
    int main(){
    	Person person;
    	NewPerson(&person);
    	person.EatFunction(person,0);
    	return 0;
    } 

    注意:测试的时候要保存为.c格式,.cpp格式运行会报错,因为C++中 this是关键字 。

    参考博客:http://dongxicheng.org/cpp/ooc/

    展开全文
  • C语言实现计算器

    万次阅读 多人点赞 2018-05-27 09:03:51
    C语言实现计算器
  • C语言实现的词法分析器,比较简单,学习编译原理时的作业。
  • 怎么使用C语言实现一个简单的

    千次阅读 2017-08-16 10:37:51
    听到一哥们碰到一个面试题,说使用C模拟一个。我们知道C中是没有的概念的,那我们怎么使用C模拟呢?其实我们的办法并不多,宏定义可能会是一个不错的选择,下面是简单的尝试。#define Struct_S \ int a;\ ...
  • 主要为大家详细介绍了C语言实现歌曲信息管理系统,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
  • C语言string实现

    2013-06-07 22:18:31
    C语言 string实现。配有C标准库函数原型
  • c语言实现鸢尾花分类问题
  • 主要为大家详细介绍了基于C语言实现点餐系统,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
  • 差分进化算法的C语言实现,有大量的注释,简单易懂! 差分进化算法的C语言实现,有大量的注释,简单易懂! 差分进化算法的C语言实现,有大量的注释,简单易懂! 差分进化算法的C语言实现,有大量的注释,简单易懂!
  • c语言实现循环buffer

    2019-01-08 18:32:54
    linux c语言实现的循环buffer机制,可以在多线程之间传递共享buffer队列
  • 本文实例为大家分享了C语言利用模板实现简单的栈(数组和单链表),供大家参考,具体内容如下 主要的功能是实现一个后进先出的列表,有入栈、出栈、返回大小、判空等基本功能 #pragma once using namespace std;...
  • 对于普通的函数来说,得在头文件里面声明(记得要用ifndef),在c文件里面定义,但是对于的成员函数来说,可以直接在class里面声明同时定义 就把看作一个加强版的结构体,结构体是可以这样的 A.c —include— ...
  • C语言实现String字符串及其函数,仅供参考~ C语言实现String字符串及其函数,仅供参考~ C语言实现String字符串及其函数,仅供参考~
  • 已知所给集合 A 和 B,求 A 与 B 的并集 C(C=A∪B)。 使学生更深刻理解集合中并运算定义,并掌握通过计算机语言实现集合并运算的基本方法。 主要仪器设备及耗材 PC,Dev-C++
  • 本文给大家分享的是前些日子去面试的时候的试题,哎,真是没想到会出这么个题,好多年没碰过C了。。。。分享给大家,小伙伴们过来参观下吧。
  • C语言实现银行家算法

    2019-03-15 23:31:43
    使用C语言实现银行家算法,其中包括安全性算法和资源分配算法
  • 模糊+PID C语言实现

    2018-06-20 00:11:13
    模糊PID算法,采用C语言实现,对于控制,特别像温度控制变化需要预测的类型,可以采用此算法
  • 基本遗传学习分类系统 c语言实现
  • C语言类与对象的实现

    千次阅读 2015-10-06 16:46:47
    为什么要用C来模拟面向对象的机制,在实际的工作中我们往往在感慨一些面向对象的经典设计模式由于C语言的限制无法使用,其实通过简单的模拟面向对象的行为,在C语言中也可以使用这些模式。 1:的构建 描述...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 262,368
精华内容 104,947
关键字:

c语言实现类

c语言 订阅