精华内容
下载资源
问答
  • c语言类和对象

    2018-08-19 22:11:54
    c语言类和对象,第一讲pdf。
  • C语言 类和对象

    2013-09-04 15:44:52
    C语言类和对象
  • C语言类对象的实现

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

    本文转自:http://www.cnblogs.com/chencheng/archive/2012/12/22/2825692.html


    为什么要用C来模拟面向对象的机制,在实际的工作中我们往往在感慨一些面向对象的经典设计模式由于C语言的限制无法使用,其实通过简单的模拟面向对象的行为,在C语言中也可以使用这些模式。


    1:类的构建


    类描述了所创建的对象共同的属性和方法。我们在一个源文件中通过把数据和操作进行适当的组织来完成类的模拟。

    /*类的数据*/
    typedef struct SQUARE_S SQUARE_T;
    struct SQUARE_S
    {
        void (*draw)(void*);
        int sideLen;
    };
    /*类的方法*/
    static void draw(void* pObj)
    {
        SQUARE_T* pSqr = (SQUARE_T*)pObj;
        printf("Draw Square len is %d\n",pSqr->sideLen);
    }

    如上所示,一个正方形的类我们用一个结构体SQUARE_T来表示正方形的属性,draw是其中的一个方法。


    2:类的封装性


    类的封装一般要求对细节的隐藏并且提供指定的方法供调用者使用,在SQUARE这个类中,sideLen是图形的细节,只需要提供一个draw接口给调用者。因此在提供给外部调用的接口头文件中构建如下的接口。

    typedef struct SHAPE_S SHAPE;
    struct SHAPE_S
    {
        void (*draw)(void*);
    };

    通过定义不同的数据结构来达到数据隐藏的目的,如下图所示,对外接口中只能看到draw,内部实现中可以看到draw和sideLen。


    3:多态的模拟


    多态无疑是面向对象语言的很重要的一个机制,很多面向对象的设计模式都是以多态为基础,C语言并不支持多态,导致很多设计模式都无法直接使用。


    一个典型的多态例子,通过声明一个SHAPE接口,根据实例化对象类型的不同,pShape在运行时动态的表现不同的行为。


    SHAPE* pShape = NULL;                   //一个形状接口
    pShape = (SHAPE*)Ins(SQUARE,2);         //实例化为一个正方形
    pShape->draw(pShape);                   //pShape表现为正方形的行为

    多态机制的实现依赖函数指针,在每个类的构造函数中把相关接口用具体的函数地址填充,这样在实例化一个对象的时候我们才绑定了其具体的操作,也就是所谓的动态绑定。

    /*每个类的构造函数*/
    static void* Constructor(void* pObj,va_list* pData)
    {
        SQUARE_T* pSquare = (SQUARE_T*)pObj;
        pSquare->draw = draw;             //具体行为的填充
        pSquare->sideLen = va_arg(*pData,int);
        return pObj;
    }
    4:对象的创建


    有了类,我们需要实例化为可以运行的对象,实例化主要的工作是分配内存、动态绑定、数据初始化等工作。

    void* Ins(const void* pClass,...)
    {
        CLASS* pCls = NULL;
        void* pObj  = NULL;
        va_list vaList = NULL;
    
        pCls = (CLASS* )pClass;
        pObj = malloc(pCls->classSize);
        memset(pObj,0,pCls->classSize);
        
        va_start(vaList,pClass);
        pObj = pCls->Constructor(pObj,&vaList);
    
        return pObj;
    }


    展开全文
  • C语言经典-类和对象

    2020-08-15 12:42:54
    本文以实验的形式,让读者能进一布加深对类和对象的理解、掌握类的构造函数和析构函数的概念和使用方法、掌握对对象数组、对象指针及其使用方法、掌握友元的概念和使用、了解类模版的使用方法。
  • "一:类和对象 1> 对象:是一个能够确定的唯一的实体. 2> 类:是对一系列具有共同特征和相同行为的对象的统称. 类: 类就是设计师的图纸 对象: 根据图纸生产出来的实实在在的艺术品 "二:类的三要素 1> ...


    ":类和对象

    1>对象:是一个能够确定的唯一的实体.

    2>:是对一系列具有共同特征和相同行为的对象的统称.


    : 类就是设计师的图纸

    对象: 根据图纸生产出来的实实在在的艺术品



    ":类的三要素

    1>类名: 这类事物的统称

    2>属性: 这类事物的共同特征(这类事物所拥有的)

    3>方法: 这类事物有哪些共同行为


    ":设计并定义一个类

    1> 设计1个人类.

    类名:人类

    属性:姓名,年龄

    行为:跑步,打招呼


    2>定义这个类

    1,类的声明

    2,类的实现


    ":创建对象并调用方法

    1> 在方法中可以访问属性


    如下

    /*

    设计1个人类.

    属性:姓名,年龄

    行为:跑步,打招呼

     */


    #import <Foundation/Foundation.h>

    //类的声明

    @interface Person: NSObject

    {

        @public

        NSString *_name;

        int _age;

    }


    - (void)run;

    - (void)sayHi;


    @end


    //类的实现

    @implementation Person

    - (void)run

    {

        NSLog(@"我在跑步");

    }

    - (void)sayHi

    {

        NSLog(@"哈喽,大家好,我叫%@,今年%d岁了",_name, _age);

    }

    @end


    int main(int argc,const char * argv[]) {

        

        //创建对象

        Person *xiaoming = [Personnew];

        //赋值属性

        xiaoming->_name = @"小明";

        xiaoming->_age = 18;

        

        //调用方法

        [xiaoming run];

        [xiaoming sayHi];

        

        return 0;

    }


    ":练习

    写一个学生类

    属性:姓名学号 年龄

    创建一个学生对象,给学生对象的各个属性赋值,并打印学生对象各个属性的值.


    @interface Student : NSObject

    {

        @public

        //姓名

        NSString * _name;

        //学号

        int  _schoolNum;

        //年龄

        int _age;

    }

    @end

    @implementation Student


    @end


    int main()

    {

        //创建对象

        Student * xiaoming = [Student new];

        

        //赋值属性

        xiaoming->_name = @"无色大师";

        xiaoming->_schoolNum = 1;

        xiaoming->_age = 10;

        

        //打印

        NSLog(@"姓名%@学号%d年龄%d", wuse->_name, wuse->_schoolNum, wuse->_age );

        

        return 0;

    }


    ":下面代码的作用

    int main()

    {

        //有一个学生类型的指针指向了一个学生对象

        Student * wuse = [Student new];

        

        return 0;

    }


    ":注意点

    1>类的声明和类的实现中,类名必须一致.


    2> 类的属性必须写在 @interface @end 之间的"{ }"内部.


    3>属性要用_开头.


    4>一个指针指向一个对象,*要么和类名在一起,要么和变量名在一起,要么在中间,要统一格式,规范书写.

    "如下:

    @interface Student : NSObject

    {

    @public

        //姓名

        NSString * _name;

    }

    @end

    @implementation Student


    int main()

        Student *xiaoming = [Student new];


        return 0;

    }


    5>对象,实质上是一个存储对象的地址的指针变量.因此要符合变量的命名规范.

    1,规定 : 变量名只能由字母,_,$,数字组合而成,且不能以数字开头.

    2,规范 : 见名知意,驼峰式命名法


    6>通过指向对象的指针访问对象的属性的方式(*对象名).属性.不建议使用这种方式,建议使用"对象名->_属性名"访问.


    int main()

    {

        Student * xiaoming  = [Student new];

        xiaoming->_name = @"无色";

        NSLog(@"%@",xiaoming->_name);

        NSLog(@"%@",(*xiaoming)._name);

        

        return 0;

    }


    7>通过对象名访问属性,注意语法格式,对象名->_属性名 (这个属性名是带_)


    int main()

    {

        

        Student * xiaoming  = [Student new];

        xiaoming->_name = @"无色";

        NSLog(@"%@",xiaoming->_name);


        return 0;

    }


    8>如果通过对象名访问属性的时候报错了,检查在类的声明部分声明属性的时候,加上一个@public修饰即可


    9>为对象的属性赋值的时候,要注意类型匹配,否则会出问题











    展开全文
  • c语言描述 对象 方法 属性四者之间区别与联系 a.对象是人们要进行研究的任何事物,它不仅能表示具体的事物,还能表示抽象的规则、计划或事件。 b.具有相同或相似性质的对象的抽象就是。因此,对象的抽象是...

    c语言描述类 对象 方法 属性四者之间区别与联系


    a.对象是人们要进行研究的任何事物,它不仅能表示具体的事物,还能表示抽象的规则、计划或事件。

    b.具有相同或相似性质的对象的抽象就是类。因此,对象的抽象是类,类的具体化就是对象,也可以说类的实例化,ASP中set classname=new classd() 就是实例化一个类;

    c.对象有它的属性和方法,举例说明,人是一个对象,人的长相和身材就是对象的属性,而说话动作就是对象的方法。

    d.对象的属性也可能是一组集合,举例说明:人这个对象的外表属性包含:长相,身高,体形,气质等。

    之前一直不能理解实例化到底是什么意思,直至今日看到百度知道的一个回答异常形象精彩,记录于此初音未来

    展开全文
  • Objective-C语言是一种面向对象编程的思想。 面向对象与面向过程的区别理解: 就用一个例子介绍:洗衣机洗衣服 面向过程的是在这样的步骤:打开洗衣机的盖,放水,脱衣服,放肥皂,放衣服,盖上盖子,启动洗衣机。 ...

    ------Java培训、Android培训、iOS培训、.Net培训、期待与您交流! -------

    Objective-C语言是一种面向对象编程的思想。

    1.面向对象与面向过程的区别理解

        就用一个例子介绍:洗衣机洗衣服

        面向过程的是在这样的步骤:打开洗衣机的盖,放水,脱衣服,放肥皂,放衣服,盖上盖子,启动洗衣机。

    每个过程都离不开人的参与。

        面向对象的是这样的:买个洗衣机,洗衣机自己打开盖子,洗衣机放水,人放衣服,洗衣机启动。

    对象有两个洗衣机,人,中间只有一个人放衣服环节需要人的参与。

        面向对象(oo):在现实世界中采用基于对象也就是实体概念建立模型,模拟客观世界分析,设计,实现软件的方法。

    面向对象三个特性:封装,多态,继承。

    2.类与对象

        类是一类事物的统称,是抽象的,拥有相同属性和行为的对象可抽象出一个类。构成元素:事物的名称即类名,属性,行为也可以说是功能。(一般名词都是类,例如坦克发射3颗炮弹轰掉了2架飞机,那坦克,炮弹,飞机是类)

        对象是现实世界中各种各样的实体。

    例如:人可以称作是类,而有个人叫小红,有个人叫小明,小红就是对象,小明也是一个对象。

    总结一个类可以实例化多个对象。

    3.类的声明和实现

    .h:类的声明文件,用于声明成员变量、方法,使用关键字@interface和@end。

    .m:类的实现文件,用于实现.h中声明的方法,使用关键字@implementation和@end。

    类的方法(在c语言中称是函数)

    以+,-开头,+表示类方法(静态方法),-表示对象方法(动态方法)

    1)类的声明

    @interface 类名:父类名

    {

        // 定义类的属性

    }

    //类的行为

    @end

    2)类的实现

    @implementation  类名

    //行为的具体实现

    @end

    例如车的类

    @interface Car:NSObject

    {

        // 定义类的属性

        NSString *color;

        int speed;

    }

    //类的行为

    @end

    @implementation  Car

    //行为的具体实现

    @end

    4、创建一个对象并访问成员变量

    类名 *类型指针变量=[类名 new];

    [Car new];//向计算机申请内存空间,给类中每一个成员初始化,返回新申请的空间的首地址

    Car *car1=[Car new];//定义一个Car类型的指针变量

    [car run];//调用方法

    创建一个对象,实质还是指针,用指针间接访问实例变量值

    car1->lunzi=3;

    car1->color=@"蓝色";

    5、无参方法声明和调用

    车跑得方法

    -(void)run;//定义一个无参无返回值的方法

    @implementation  Car

    -(void)run{

    NSLog(@"车跑得快");

    }//行为的具体实现

    @end

    对象方法和类方法的区别:

    对象方法:

    1. 对象方法以-开头,如-(void)run;
    2. 对象方法只能由对象来调用;
    3. 对象方法中可以访问当前对象的成员变量;
    4. 调用格式 [对象名  对象方法名];

    类方法:

    1. 类方法以+开头,如+(void)run;
    2. 类方法只能由类来调用;
    3. 类方法中不能访问实例 成员变量,因为类方法只能由类来调用,并没有创建存储空间来存储类中的成员变量。
    4. 调用格式 [类名  类方法名];
    5. 类的优点和适用场合:效率更高,不依赖于对象;当方法内部不需要使用成员变量时,可以改为类的方法。

    6、有参方法声明和调用

    -(返回值类型)方法名1:(参数类型) 参数名;

    -(返回值类型)方法名1:(参数类型1) 参数名1  and:(参数类型2) 参数名2;

    -(int)sum:(int) x  and:(int) y;//方法声明,方法名:sum:和and:

    //方法实现

    -(int)sum:(int) x  and:(int) y

    {

      return x+y;

    }

    7、创建错误

    • @interface……@end和@implementation……@end不能嵌套;
    • 只有类的声明没有类的实现;
    • 漏写@end符号;
    • 两个类的对象声明顺序可以打乱,先声明对象的顺序和实现的顺序不一定要一致,但是必须声明在前,实现在后
    • 方法的声明写在了{}里面;
    • 在声明时不能对类的成员变量进行初始化,要注意成员变量不能脱离对象而独立存在
    • 方法对象不能向函数那样调用
    • 成员变量和方法不能用static等关键字修饰
    • 类的实现可以写在main函数后面,在使用之前有声明就可以。

    8、对象和方法之间的关系

    A对象作为方法的参数

    -(void)display:(Person *) person;

    Person *p=[Person new];

    [p diaplay:p1];//在这儿p1作为实参将传递给形参person

    B对象作为方法的返回值

    -(Person *)changeSex:(Person *) person;

    9、对象作为方法的参数连续传递

    例子:士兵开枪,枪射击子弹

    //枪类声明
    @interface Gun :NSObject
    {
    	@public
    	NSString *_size;//枪的型号
    	int _bulletCount;//枪的子弹数
    }
    //行为,士兵开火
    -(void)shoot;
    @end
    
    //	枪类实现
    @implementation Gun
    - (void)shoot{
    	//每射击一次子弹个数减一
        if (_bulletCount > 0){
            _bulletCount--;
            NSLog(@"\n%@ 正在射击,剩余子弹:%d",_size, _bulletCount);
        }
        else{
            NSLog(@"\n%@ 没有子弹数");
        }
    }
    @end
    //士兵类声明
    @interface Soldier:NSObject
    {
    	@public
    	NSString *_name;
    	int life;
    	int level
    }
    //行为,士兵开火
    -(void)fireByGun:(Gun *) gun;
    @end
    //士兵类实现
    @implementation Soldier
    -(void)fireByGun:(Gun *)gun{
    //枪射击
    	[gun shoot];
    }
    @end
    int main(int argc, const char *argv[]){
    	@autoreleasepool{
    	//创建一个士兵对象
    	Soldier *s = [Soldier new];
    	s->name = @"zhanggoong";
    	s->life = 98;
    	s->level = 2;
    	//创建枪对象
    	Gun *gun = [Gun new];
    	gun->size = @"小米";
    	gun->bulletCount = 3;
    	//士兵开枪
    	[s fireByGun:gun];
    	}
    	return 0;
    }


    ------Java培训、Android培训、iOS培训、.Net培训、期待与您交流! -------

    展开全文
  • c语言虽然没有,但是有结构体,合理运用结构体,虽然有些繁琐,但是也可以实现面向对象。     封装 结构体的指针变量可以用来关联函数,这样就可以实现封装性。 下面实例中就能体现这一点(这个也能体现...
  • 类和对象C语言-15)

    2021-05-16 09:10:31
    类和对象 万事万物皆可以作为对象,对象上有其属性和行为。 例如: 人可以作为对象,属性有身高,体重,年龄…,行为有跑步,唱歌… 具有相同性质的对象,可以抽象为类 1.封装 1)设计一个圆类,求圆的周长 class...
  • 面向对象程序设计上机练习六(类和对象) Time Limit: 1000ms Memory limit: 65536K 有疑问?点这里^_^ 题目描述 用类成员函数完成5个整型数组元素的输入、从小到大排序、排序后数组元素的输出。 输入 输入5个...
  • 面向对象编程(OOP)并不是一种特定的语言或者工具,它只是一种设计方法、设计思想。它表现出来的三个最基本的特性就是封装、继承与多态。...封装就是把数据方法打包到一个里面。其实C语言编程者应该都已经接触
  • C语言实现面向对象

    2017-01-23 19:19:35
    众所周知,面向对象大行其道,其中以C++、JAVA等这样的高级语言为代表,而这样的高级OO语言其实也是以C...在面向对象中顶级存在是类和对象,而在过程式语言中函数则是顶级存在。 1.定义子类和父类表现形式 C语言中没有
  • 类和对象 自动释放池 @autoreleasepool C语言 printf("Hello, World!%d\n", a); OC中的打印函数 NSLog(@"Hello, World!%d", a); NSLog(@"你好!"); NSLog比起printf增加的功能 1.自动换行 2.附加其他...
  • 我们可以用struct中的数据函数指针,以此来模拟对象和类的行为。 所以在正式开始设计模式前,先看看如何用C语言实现面向对象编程。 本章针对面向对象的封装、继承、组合、多态给出C语言的实现方法。 1.1 封装 封装...
  • C++ 面向对象程序设计教学内容 第一章 C++ 更好的C 第二章 封装性类和对象 第三章 运算符重载 第四章 继承性派生类 第五章 多态性虚函数 第六章 模板 第七章 类库和标准库 第八章 异常处理 第二章 类和对象 2.1 类和...
  • 用于指定对象的形式,它将数据表示方法组合在一起,以便将数据操作到一个整齐的包中。 中的数据方法称为的成员。 1. Objective-C特征 定义在两个不同的部分,即@interface@implementation。 几乎...
  • 主要介绍了如何从C语言中读取Python 文件对象,文中讲解非常细致,代码帮助大家更好的理解学习,感兴趣的朋友可以了解下
  • c++:类和对象简明理解——c语言区别

    千次阅读 2018-09-13 16:40:19
    1.c语言:  面向过程的语言,强调算法,过程性编程语言;  自顶向下,将大型程序分解为小的任务(函数),强调单元和模块;... 2.2 C++中的类和对象说明:  自底向上的编程,从低级组织(类)...
  • C语言模拟面向对象

    2014-10-21 14:41:30
    c语言继承面向对象  这个代码是修改自lwoopc,截取其中一部分,然后添加一部分。 在VC6.0gcc可编译,大家可以从程序代码中的"//文件开始部分"开始看 CTOR是构造,DTOR是析构 [cpp] view...
  • 封装的目的在于把对象的设计者和对象者的使用分开,使用者不必知晓行为实现的细节,只须用设计者提供的消息来访问该对象。在C语言中,大多数函数的命名方式是动词+名词的形式,例如要获取一个semaphore,会
  • 关联对象(Runtime分析查看分类关联对象的实现机制、原理) 扩展、代理怎么使用(分类扩展的区别在哪里?) KVO、KVC( KVO、KVC的实现机制、原理、包括涉及到了哪些设计思想) NSNotification(通知的...
  • 面向对象是一种思想,并没有规定死怎么去实现。这里我用C语言这种面向过程的语言来模拟了一下。暂时解决了封装,方法的重载,继承多态还没实现。 #include <stdio.h> #include <stdlib.h> struct ...
  • 如何用C语言实现面向对象

    千次阅读 2016-07-20 19:11:54
    C语言是一种结构化的编程语言,以模块化功能处理过程设计为主,从而实现数据与代码分隔。面向对象的编程语言,核心是用来创造对象的模板,的三要素为:封装,继承,多态。C语言本身对面向对象的支持很弱,...
  • C语言中一个结构体代表一个,用此结构体命名一个变量称为该的一个详细对象 C语言的简单工厂模式:此处自己的理解为将各个模块功能封装起来用链表的方式将各个模块进行连接,这样程序的可拓展性纠错性大大提高...
  • 而JavaPython从设计之初就已经是一门面向对象的语言;PHP语言可以同时应用面向过程面向对象编程。 可以简单地理解为:面向谁就是以谁为中心,具体来说: 面向过程就是分析出解决问题所需要的步骤,然后用函数把...
  • 其实在使用C语言写程序的过程中,也可以引入一些面象对象的思想。下面我们主要来谈谈如何用C语言把这些思想表达出来: 1. 封装 这个最简单了,C语言中虽然没有,但有struct。这可是个好东西。我们可以在一个...

空空如也

空空如也

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

c语言类和对象

c语言 订阅