精华内容
下载资源
问答
  • C语言面向对象编程

    2018-06-01 16:47:30
    C语言面向对象编程技术,是C语言开发者不可多得的技术书籍
  • C语言 面向对象编程

    2019-05-14 14:07:52
    C语言是典型的“面向过程式语言”,与之相对应的C++是“面向对象的编程语言”。...面向对象编程(OOP)不是使用特定的语言或工具。它是一种基于三个基本设计元模式的设计方法: 封装:数据和函数在一起打包成类的...

    C语言是典型的“面向过程式语言”,与之相对应的C++是“面向对象的编程语言”。但是很多人不知道的是C语言也可以实现面向对象的编程。从根本上说任何图灵完备的语言都可以互相实现。这么说你想用汇编实现面向对象理论上也是可以的。另外,高级语言不都是先编译成汇编,再形成机器码么。。。

    面向对象编程(OOP)不是使用特定的语言或工具。它是一种基于三个基本设计元模式的设计方法:
    封装:数据和函数在一起打包成类的能力
    继承:基于现有类定义新类的能力,以便获得重用和代码组织
    多态:能够在运行时相互替换匹配接口的对象
    尽管这些元模式传统上与面向对象的语言(如asSmalltalk、c++或Java)相关联,但是您几乎可以用任何编程语言实现它们,包括可移植的ANSI-C。

    原文:QP平台(https://www.state-machine.com/)《AN_OOP_in_C》Object-Oriented Programming in C
    下载:https://www.state-machine.com/doc/AN_OOP_in_C.pdf

    Object-oriented programming (OOP) is not the use of a particular language or a tool. It is rather a way ofdesign based on the three fundamental design meta-patterns:

    • Encapsulation – the ability to package data and functions together into classes
    • Inheritance – the ability to define new classes based on existing classes in order to obtain reuse andcode organization
    • Polymorphism – the ability to substitute objects of matching interfaces for one another at run-time

    Although these meta-patterns have been traditionally associated with object-oriented languages, such asSmalltalk, C++, or Java, you can implement them in almost any programming language including portable ANSI-C [1,2,3,4,5,6].

    展开全文
  • 此实例文件是文章《学会C语言面向对象编程,弄清面向对象实质。》的附件https://blog.csdn.net/weixin_42523774/article/details/105649779,是为了告诉大家如何用C语言实现面向对象的语言。
  • C语言面向对象编程与设计模式
  • C语言面向对象编程(四) 面向接口编程

    分享一下我老师大神的人工智能教程!零基础,通俗易懂!http://blog.csdn.net/jiangjunshow

    也欢迎大家转载本篇文章。分享知识,造福人民,实现我们中华民族伟大复兴!

                   

        Java 中有 interface 关键字,C++ 中有抽象类或纯虚类可以与 interface 比拟,C 语言中也可以实现类似的特性。

        在面试 Java 程序员时我经常问的一个问题是:接口和抽象类有什么区别。

        很多编程书籍也经常说要面向接口编程,我的理解是,接口强制派生类必须实现基类(接口)定义的契约,而抽象类则允许实现继承从而导致派生类可以不实现(重写)基类(接口)定义的契约。通常这不是问题,但在有一些特定的情况,看起来不那么合适。

        比如定义一个 Shape 基类,其中定义一个 draw() 方法,给一个什么都不做的默认实现(通常是空函数体),这实际没有任何意义。

        再比如基类改变某个方法的实现,而派生类采用实现继承并没有重写这个方法,此时可能会导致一些奇怪的问题。以鸟为例,基类为 Bird ,我们可能会定义一个 fly() 方法,一个 walk() 方法,因为有的人认为鸟既可以走又可以飞。开始时我们在 walk() 的实现里作了假定,认为双脚交叉前进才是 walk ,可是后来发现有些鸟是双脚一齐蹦的,不会交叉前进。这个时候怎么办?基类 Bird 的 walk() 方法是否要修改、如何修改?

        在 C++ 中,没有接口关键字 interface ,同时为了代码复用,经常采用实现继承。在 C 语言中,我们前面几篇文章讨论了封装、隐藏、继承、虚函数、多态等概念,虽然都可以实现,但使用起来总不如自带这些特性的语言(如 C++ 、Java )等得心应手。一旦你采用我们前面描述的方法来进行面向对象编程,就会发现,在 C 语言中正确的维护类层次是一件非常繁琐、容易出错的事情,而且要比面向对象的语言多写很多代码(这很容易理解,面向对象语言自带轮子,而 C 要自己造轮子,每实现一个类都要造一遍)。但有一点,当我们使用 C 语言作面向对象编程时,比 C++ 有明显的优势,那就是接口。

        接口强制派生类实现,这点在 C 中很容易做到。而且我们在编程中,实际上多数时候也不需要那么多的继承层次,一个接口类作为基类,一个实现类继承接口类,这基本就够了。在 C 语言中采用这种方式,可以不考虑析构函数、超过 3 层继承的上下类型转换、虚函数调用回溯、虚函数表装配等等问题,我们所要做的,就是实现基类接口,通过基类指针,就只能操作继承层次中最底层的那个类的对象;而基类接口,天生就是不能实例化的(其实是实例化了没办法使用,因为结构体的函数指针没人给它赋值)。

        一个示例如下:

    struct base_interface {    void (*func1)(struct base_interface* b);    void (*func2)(struct base_interface* b);    int (*func_3)(struct base_interface* b, char * arg);};struct derived {    struct base_interface bi;    int x;    char ch;    char *name;};

        上面是头文件,derived 结构体通过包含 base_interface 类型的成员 bi 来达到继承的效果;而 base_interface 无法实例化,我们没有提供相应的构造函数,也没有提供与 func_1 , func_2 等函数指针对应的实现,即便有人 malloc 了一个 base_interface ,也无法使用。

        derived 类可以提供一个构造函数 new_derived ,同时在实现文件中提供 func_1 , func_2 ,func_3 的实现并将函数地址赋值给 bi 的成员,从而完成 derived 类的装配,实现 base_interface 定义的契约。

        示例实现如下:

    static void _derived_func_1(struct base_interface *bi){    struct derived * d = (struct derived*)bi;    d->x *= 2;    printf("d->name = %s\n", d->name);}/* _derived_func_2 impl *//* _derived_func_3 impl */struct derived *new_derived(){    struct derived *d = malloc(sizeof(struct derived));    d->bi.func_1 = _derived_func_1;    d->bi.func_2 = _derived_func_2;    d->bi.func_3 = _derived_func_3;    d->x = 0;    d->ch = 'a';    d->name = NULL;    return d;}

        我们可以这么使用 base_interface 接口:

    void do_something(struct base_interface *bi){    bi->func_1(bi);}int main(int argc, char **argv){    struct derived * d = new_derived();    do_something((struct base_interface*)d);    return 0;}

        上面的代码中 do_something 函数完全按照接口编程,而 bi 可以实际指向任意一个实现了 base_interface 接口的类的实例,在一定程序上达到多态的效果,花费的代价相当小,却可以让我们的程序提高可扩展性,降低耦合。

        这种简单的方法也是我在自己的项目中使用的方法,效果不错。

        好啦,C 语言面向对象编程系列的基础性介绍就告一段落,下面是前几篇的链接,有兴趣的可以回头看看:

        接下来我会提供几个实作的例子,包括基本的数据结构,如单链表、树,还有一个 http server 的例子。


               

    给我老师的人工智能教程打call!http://blog.csdn.net/jiangjunshow

    这里写图片描述
    展开全文
  • c语言面向对象编程中的类 C ++中的面向对象编程 (Object Oriented Programming in C++) Object Oriented programming is a programming style that is associated with the concept of Class, Objects and various ...

    c语言面向对象编程中的类

    Object Oriented programming is a programming style that is associated with the concept of Class, Objects and various other concepts revolving around these two, like Inheritance, Polymorphism, Abstraction, Encapsulation etc.

    面向对象编程是一种与类,对象以及围绕这两个主题的各种其他概念相关的编程风格,例如继承,多态性,抽象,封装等。

    Basic OOPS concepts in c++

    In the video below, we have explained the basic concepts of Object Oriented Programming with help of a very easy to understand example. If you want to skip the video, everything is covered below as well.

    在下面的视频中,我们通过一个非常易于理解的示例解释了面向对象编程的基本概念。 如果您想跳过视频,下面还将介绍所有内容。

    演示地址

    Let us try to understand a little about all these, through a simple example. Human Beings are living forms, broadly categorized into two types, Male and Female. Right? Its true. Every Human being(Male or Female) has two legs, two hands, two eyes, one nose, one heart etc. There are body parts that are common for Male and Female, but then there are some specific body parts, present in a Male which are not present in a Female, and some body parts present in Female but not in Males.

    让我们尝试通过一个简单的示例来稍微了解一下所有这些内容。 人类是生命形式,大致分为男性和女性两种类型。 对? 这是真的。 每个人(男性或女性)都有两条腿,两只手,两只眼睛,一只鼻子,一颗心脏等。男性和女性都有一些共同的身体部位,但男性有一些特定的身体部位雌性中不存在,而雌性中有一些身体部位,雄性中不存在。

    All Human Beings walk, eat, see, talk, hear etc. Now again, both Male and Female, performs some common functions, but there are some specifics to both, which is not valid for the other. For example : A Female can give birth, while a Male cannot, so this is only for the Female.

    所有人类都走路,吃饭,看,说话,听等。现在,男性和女性都执行一些共同的功能,但是两者都有一些特定的规定,对另一个无效。 例如:女性可以生子,而男性则不能,所以这仅适用于女性。

    Human Anatomy is interesting, isn't it? But let's see how all this is related to C++ and OOPS. Here we will try to explain all the OOPS concepts through this example and later we will have the technical definitons for all this.

    人体解剖学很有趣,不是吗? 但是,让我们看看所有这些与C ++和OOPS有何关系。 在这里,我们将尝试通过此示例解释所有OOPS概念,稍后,我们将对所有这些进行技术定义。

    (Class)

    Here we can take Human Being as a class. A class is a blueprint for any functional entity which defines its properties and its functions. Like Human Being, having body parts, and performing various actions.

    在这里,我们可以将人类作为一个类。 类是定义其属性和功能的任何功能实体的蓝图。 像人类一样,具有身体部位,并执行各种动作。

    遗产 (Inheritance)

    Considering HumanBeing a class, which has properties like hands, legs, eyes etc, and functions like walk, talk, eat, see etc. Male and Female are also classes, but most of the properties and functions are included in HumanBeing, hence they can inherit everything from class HumanBeing using the concept of Inheritance.

    考虑到HumanBeing是一类,它具有诸如手,腿,眼睛等的属性,并且具有走路,说话,吃饭,看东西等功能。 MaleFemale也是一类,但是HumanBeing中包含了大多数的属性和功能,因此它们可以使用继承概念继承HumanBeing中的所有内容。

    对象 (Objects)

    My name is Abhishek, and I am an instance/object of class Male. When we say, Human Being, Male or Female, we just mean a kind, you, your friend, me we are the forms of these classes. We have a physical existence while a class is just a logical definition. We are the objects.

    我的名字是Abhishek,我是Male类的实例/对象 。 当我们说“人类,男性或女性”时,我们的意思是一种,您,您的朋友,我,我们就是这些课程的形式。 当一个类只是一个逻辑定义时,我们就有了物理存在。 我们是对象。

    抽象化 (Abstraction)

    Abstraction means, showcasing only the required things to the outside world while hiding the details. Continuing our example, Human Being's can talk, walk, hear, eat, but the details are hidden from the outside world. We can take our skin as the Abstraction factor in our case, hiding the inside mechanism.

    抽象意味着在隐藏细节的同时只向外界展示必需的东西。 继续我们的例子, 人类可以说话,走路,听,吃,但是细节对外界是隐藏的。 在我们的案例中,我们可以将皮肤作为抽象因素,隐藏内部机制。

    封装形式 (Encapsulation)

    This concept is a little tricky to explain with our example. Our Legs are binded to help us walk. Our hands, help us hold things. This binding of the properties to functions is called Encapsulation.

    用我们的例子来解释这个概念有些棘手。 我们的双腿被束缚以帮助我们行走。 我们的双手,帮助我们握紧东西。 属性与函数的这种绑定称为封装。

    多态性 (Polymorphism)

    Polymorphism is a concept, which allows us to redefine the way something works, by either changing how it is done or by changing the parts using which it is done. Both the ways have different terms for them.

    多态是一个概念,它使我们可以通过更改完成方式或更改完成使用的部件来重新定义其工作方式。 两种方式都有不同的用语。

    If we walk using our hands, and not legs, here we will change the parts used to perform something. Hence this is called Overloading.

    如果我们用双手而不是腿走路,那么这里将改变用于执行某些动作的零件。 因此,这称为Overloading

    And if there is a defined way of walking, but I wish to walk differently, but using my legs, like everyone else. Then I can walk like I want, this will be called as Overriding.

    如果有明确的步行方式,但我希望以与众不同的方式,以不同的方式走路,但是要用我的腿。 然后,我可以按照自己的意愿行走,这称为“ 覆盖”

    OOPS概念定义 (OOPS Concept Definitions)

    Now, let us discuss some of the main features of Object Oriented Programming which you will be using in C++(technically).

    现在,让我们讨论一下您将在C ++(技术上)中使用的面向对象编程的一些主要功能。

    1. Objects

      对象

    2. Classes

      班级

    3. Abstraction

      抽象化

    4. Encapsulation

      封装形式

    5. Inheritance

      遗产

    6. Overloading

      超载

    7. Exception Handling

      异常处理

    对象 (Objects)

    Objects are the basic unit of OOP. They are instances of class, which have data members and uses various member functions to perform tasks.

    对象是OOP的基本单位。 它们是类的实例,具有数据成员并使用各种成员函数来执行任务。

    (Class)

    It is similar to structures in C language. Class can also be defined as user defined data type but it also contains functions in it. So, class is basically a blueprint for object. It declare & defines what data variables the object will have and what operations can be performed on the class's object.

    它类似于C语言的结构。 也可以将类定义为用户定义的数据类型,但其中也包含函数。 因此,类基本上是对象的蓝图。 它声明并定义对象将拥有哪些数据变量以及可以对类的对象执行哪些操作。

    抽象化 (Abstraction)

    Abstraction refers to showing only the essential features of the application and hiding the details. In C++, classes can provide methods to the outside world to access & use the data variables, keeping the variables hidden from direct access, or classes can even declare everything accessible to everyone, or maybe just to the classes inheriting it. This can be done using access specifiers.

    抽象是指仅显示应用程序的基本功能并隐藏细节。 在C ++中,类可以为外部世界提供访问和使用数据变量的方法,使变量不被直接访问隐藏,或者类甚至可以声明所有人都可以访问的所有内容,也可以仅声明继承它的类。 这可以使用访问说明符来完成。

    封装形式 (Encapsulation)

    It can also be said data binding. Encapsulation is all about binding the data variables and functions together in class.

    也可以说是数据绑定。 封装就是将类中的数据变量和函数绑定在一起。

    遗产 (Inheritance)

    Inheritance is a way to reuse once written code again and again. The class which is inherited is called the Base class & the class which inherits is called the Derived class. They are also called parent and child class.

    继承是一种反复使用一次编写的代码的方法。 继承的类称为类,而继承的类称为Derived类。 他们也被称为父母和孩子班。

    So when, a derived class inherits a base class, the derived class can use all the functions which are defined in base class, hence making code reusable.

    因此,当派生类继承基类时,派生类可以使用基类中定义的所有功能,从而使代码可重用。

    多态性 (Polymorphism)

    It is a feature, which lets us create functions with same name but different arguments, which will perform different actions. That means, functions with same name, but functioning in different ways. Or, it also allows us to redefine a function to provide it with a completely new definition. You will learn how to do this in details soon in coming lessons.

    它是一项功能,使我们可以创建具有相同名称但参数不同的函数,这些函数将执行不同的操作。 这意味着,具有相同名称的功能,但以不同的方式起作用。 或者,它还允许我们重新定义一个函数以为其提供全新的定义。 在接下来的课程中,您将很快详细了解如何执行此操作。

    异常处理 (Exception Handling)

    Exception handling is a feature of OOP, to handle unresolved exceptions or errors produced at runtime.

    异常处理是OOP的一项功能,用于处理运行时产生的未解决的异常或错误。

    翻译自: https://www.studytonight.com/cpp/cpp-and-oops-concepts.php

    c语言面向对象编程中的类

    展开全文
  • 很多人认为,C语言编程,就是函数式编程,C++, JAVA等高级语言,才是面向对象编程。 其实,这是错误的认识!面向对象编程是一种思想,是一种编程思路,实现这种编程思路,不局限于是使用C语言还是使用C++语言。 ...

           结构体是一个非常重要的知识点,必须掌握和深入理解使用。现在网络上还经常讨论函数式编程和面向对象编程。很多人认为,C语言编程,就是函数式编程,C++, JAVA等高级语言,才是面向对象编程。

           其实,这是错误的认识!面向对象编程是一种思想,是一种编程思路,实现这种编程思路,不局限于是使用C语言还是使用C++语言。

           使用C语言也可以实现面向对象编程。例如linux的内核,这么复杂的一个操作系统,是使用C语言来设计完成,很多地方是使用了面向对象的编程思想。

           那么,使用C语言来实现“面向对象编程”思路,就是使用结构体来完成。C++中使用类来定义成员变量和方法,相应的,C语言也可以使用结构体来完成这项操作。C语言的结构体可以定义成员变量,同时,可以定义函数指针,实现C++类的方法。

           下面我通过程序测试例子来讲解“使用结构体实现面向对象编程”的知识。首先,给出程序测试例子代码:

           程序运行结果如下:

           在这个例子中,讲解一个图书管理系统中的借书和还书功能。对于读者来说,有普通读者和VIP读者。读者有借书和还书的操作。

           此时,我们使用面向对象编程的思想来设计程序。首先,分析设计程序要实现什么功能,它有什么对象进行活动,对象之间是什么关系,对象有什么操作。那么,我们可以归纳如下:

    (1) 程序是一个图书馆的借书和还书功能模块;

    (2) 程序是涉及到的活动对象是读者和图书;

    (3) 对象之间的活动关系是:读者结束、读者还书;

    (4) 读者有普通用户和VIP用户类型的区别;

    (5) 普通用户和VIP用户的借书和还书有普通的操作;

           所以,归纳出了这些问题,我们就可以有如下是设计思路:

    (1) 需要定义读者和图书这样的两个结构体类型;所以,我们定义了struct reader, struct book这样的结构体类型;

    (2) 读者结构体类型中,需要定义普通用户和VIP用户的区分属性;所以,在struct reader结构体类型中,定义了 is_vip属性,用于定义当前读者的身份类型;

    (3) 普通读者和VIP读者的借书和还书操作不一样,所以,定义普通读者操作是:

    void my_borrow_book(struct reader* preader, struct book* pbook)

    void my_payback_book(struct reader* preader, struct book* pbook)

    VIP读者的操作是:

    void my_vip_borrow_book(struct reader* preader, struct book* pbook)

    void my_vip_payback_book(struct reader* preader, struct book* pbook)

           这些函数操作是读者的一个属性,所以,需要给读者定义函数指针成员,指向具体的操作函数。如下:

    //定义函数指针, pfunc_borrow_book 类型的函数;

    pfunc_borrow_book borrow_book;

    //定义函数指针, pfunc_payback_book 类型的函数;

    pfunc_payback_book payback_book;

           最终,在init_reader_function()函数中,根据读者是否为VIP类型,给对象的函数指针成员指向不同的函数。如下:

        if(preader->is_vip)

        {

           //给函数指针赋值, 让它指向具体的函数;

           preader->borrow_book = my_vip_borrow_book;

           preader->payback_book = my_vip_payback_book;

        }

        else

        {

           preader->borrow_book = my_borrow_book;

           preader->payback_book = my_payback_book;

        }

           那么,不同的读者类型,调用相同的函数指针,就调用指向不同的函数。例如:

    r1.borrow_book(&r1, &b1);   //读者 r1 借书

    r2.borrow_book(&r2, &b2);   //读者 r2 借书

           此时,读者都是调用borrow_book函数指针指向的函数,那么,由于r1是普通用户,它的函数指针指向my_borrow_book()函数,所以,r1.borrow_book()调用的就是my_borrow_book()函数。

           同理,r2是VIP用户,它的borrow_book函数指针指向my_vip_borrow_book ()函数,所以,r2.borrow_book()调用的就是my_vip_borrow_book ()函数。

           通过这个例子,我们更深入地学习了结构体的应用,并提出了面向对象的编程思想。使用C语言的结构体知识可以实现面向对象编程。

    更多的交流可以访问:www.mylinux.vip   加QQ:1523520001,微信:13926572996,备注:linux编程;
    学习、分享更多的linux C/C++ 编程知识。
     

     

    展开全文
  • C语言面向对象编程(doc格式,将docx格式转化成了doc格式)
  • C语言面向对象编程(doc格式,非英文翻译版) C语言面向对象编程(doc格式,非英文翻译版)
  • C语言面向对象编程(三) 虚函数与多态
  • 轻量级的C语言面向对象编程框架

    千次阅读 2014-05-24 00:13:13
    轻量级的C语言面向对象编程框架
  • 本文为大家提供基本的面向对象C语言实现方式,带大家搞清楚面向对象的实质,希望大家能够更深入的理解面向对象的实质,并在后续的编程中使用。
  • 如何用C语言实现面向对象思想的开发?现状目前各行各业中的软件工程师规模庞大,种类繁多,但是有一小众化的软件工程师往往受到忽视,那就是嵌入式软件工程师,对于小众化的嵌入式软件工程师其实门槛还是很高的,要...
  • C语言写的面向对象框架的内核部分,由于刚刚开始写,内容仅包含底层核心。本来不想要币的,但发现自己居然没币了,所以,大家支持下哈。。 ^_^
  • C语言是一门面向过程的编程语言,里面没有类的说法,没有类的继承、封装、多态。...面向对象编程,每个对象都有自己的封装的方法(函数),在C语言中,结构体内是不允许定义函数的,但我们可以定义一个函数指针,...
  • Windows 平台上的 INI 文件格式简单易用,本篇文章利用《C语言面向对象编程(五):单链表实现》中实现的单链表,设计了一个“类” ini_parser 来读写 INI 格式的配置文件。 struct ini_parser 可以解析 INI 格式...
  • C语言面向对象编程(一):封装与继承 http://blog.csdn.net/foruok/article/details/18192167  最近在用 C 做项目,之前用惯了 C++ ,转回头来用C 还真有点不适应。 C++ 语言中自带面向对象支持,如封装、...
  • C语言面向对象编程之基类。

    千次阅读 2017-10-24 17:24:43
    我们作为一个程序员,C语言...一开始,我们会发现,c语言里边会有结构体struct,和c++中的类是很相似的,同时C语言接头体里边可以包含函数指针,那么我们针对帧一点开始动手做自己的C语言面向对象lib。我们参考万物皆有
  • Java 中有 interface 关键字,... 很多编程书籍也经常说要面向接口编程,我的理解是,接口强制派生类必须实现基类(接口)定义的契约,而抽象类则允许实现继承从而导致派生类可以不实现(重写)基类(接口)定义的...
  • Java 中有 interface 关键字,C++ 中有... 很多编程书籍也经常说要面向接口编程,我的理解是,接口强制派生类必须实现基类(接口)定义的契约,而抽象类则允许实现继承从而导致派生类可以不实现(重写)基类(接口)

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 6,354
精华内容 2,541
关键字:

c语言面向对象编程

c语言 订阅