C之面向对象编程20170707
语言只是工具,设计思维才是根本。C虽然是面向过程的语言,但也是可以实现面向对象编程的,本文就是介绍如何使用C语言实现面向对象编程。
我们知道面向对象主要有三大特性:封装,继承,和多态,下面就从这个三个方面讲解:
一、封装:
个人认为封装最重要的意义是:通过类的公有函数访问私有成员,从而降低耦合。
C中我们通过结构体加函数指针的方式实现封装,我们直接看代码:
封装使用场景:
/*****************************************************************************
* Copyright (C) 2017-2018 Hanson Yu All rights reserved.
------------------------------------------------------------------------------
* File Module : RealizeEncapsulation.c
* Description : 封装
book@book-desktop:/work/projects/test$ gcc -o RealizeEncapsulationTest RealizeEncapsulation.c RealizeEncapsulationNoStaticVariable.c RealizeEncapsulationTest.c
book@book-desktop:/work/projects/test$ ./RealizeEncapsulationTest
GetIP:218.17.161.66,Port:21213
AfterSet,IP:192.168.12.1,Port:12322
AfterSetValue,IP:192.168.1.1,Port:12222 * Created : 2017.07.02.
* Author : Yu Weifeng
* Function List :
* Last Modified :
* History :
******************************************************************************/
#include"stdio.h"
#include"malloc.h"
#include"stdlib.h"
#include"string.h"
#include"RealizeEncapsulation.h"
#include"RealizeEncapsulationNoStaticVariable.h" #define STRING_MAX_LEN (15)
/*****************************************************************************
-Fuction : main
-Description : main
-Input :
-Output :
-Return :
* Modify Date Version Author Modification
* -----------------------------------------------
* 2017/06/29 V1.0.0 Yu Weifeng Created
******************************************************************************/
int main(int argc,char **argv)
{
char strIp[STRING_MAX_LEN];
unsigned short wPort;
//缺陷:多个对象访问的是同一个私有变量(所以并发要加锁)
T_ParaOpr tParaOpr=newParaOpr;//创建实例化对象
tParaOpr.GetPara(strIp,STRING_MAX_LEN,&wPort);
printf("GetIP:%s,Port:%d\r\n",strIp,wPort); strncpy(strIp,"192.168.12.1",sizeof("192.168.12.1"));
wPort=;
tParaOpr.SetPara(strIp,wPort);
tParaOpr.GetPara(strIp,STRING_MAX_LEN,&wPort);
printf("AfterSet,IP:%s,Port:%d\r\n",strIp,wPort);
//私有变量在外部,虽然没静态但破坏了封装性,所以上一种更好
char strIpValue[STRING_MAX_LEN];
unsigned short wPortValue;
T_NetParaOpr tNetParaOpr=newNetParaOpr(strIpValue,wPortValue);//创建实例化对象 ,传入变量
strncpy(strIp,"192.168.1.1",sizeof("192.168.1.1"));
wPort=;
tNetParaOpr.SetPara(&tNetParaOpr,strIp,wPort);
tNetParaOpr.GetPara(&tNetParaOpr,strIp,&wPort);
printf("AfterSetValue,IP:%s,Port:%d\r\n",strIp,wPort);
return ;
}
RealizeEncapsulationTest.c
被调用者:
/*****************************************************************************
* Copyright (C) 2017-2018 Hanson Yu All rights reserved.
------------------------------------------------------------------------------
* File Module : RealizeEncapsulation.c
* Description : 整个文件只包含类相关的变量及操作
* Created : 2017.07.02.
* Author : Yu Weifeng
* Function List :
* Last Modified :
* History :
******************************************************************************/
#include"stdio.h"
#include"malloc.h"
#include"stdlib.h"
#include"string.h"
#include"RealizeEncapsulation.h" #define IP_MAX_LEN (15) static char g_strIp[IP_MAX_LEN];//私有变量
static unsigned short g_wPort;//私有变量 /*****************************************************************************
-Fuction : InitPara
-Description : 私有函数
-Input :
-Output :
-Return :
* Modify Date Version Author Modification
* -----------------------------------------------
* 2017/06/29 V1.0.0 Yu Weifeng Created
******************************************************************************/
static void InitPara()
{
//多线程可内部加锁
strncpy(g_strIp,"218.17.161.66",IP_MAX_LEN);
g_wPort=;
} /*****************************************************************************
-Fuction : SetPara
-Description : 公有函数
-Input :
-Output :
-Return :
* Modify Date Version Author Modification
* -----------------------------------------------
* 2017/06/29 V1.0.0 Yu Weifeng Created
******************************************************************************/
void SetPara(char *i_strIp,unsigned short i_wPort)
{
//多线程可内部加锁
strncpy(g_strIp,i_strIp,IP_MAX_LEN);
g_wPort=i_wPort;
}
/*****************************************************************************
-Fuction : GetPara
-Description : 公有函数
-Input :
-Output :
-Return :
* Modify Date Version Author Modification
* -----------------------------------------------
* 2017/06/29 V1.0.0 Yu Weifeng Created
******************************************************************************/
void GetPara(char *o_strIp,char i_strIpMaxLen,unsigned short *o_wPort)
{
//多线程可内部加锁
if(NULL==g_strIp||g_wPort==)
{
InitPara();
}
else
{
}
strncpy(o_strIp,g_strIp,i_strIpMaxLen);
*o_wPort=g_wPort;
}
RealizeEncapsulation.c
/*****************************************************************************
* Copyright (C) 2017-2018 Hanson Yu All rights reserved.
------------------------------------------------------------------------------
* File Module : RealizeEncapsulation.h
* Description : RealizeEncapsulation operation center
* Created : 2017.06.24.
* Author : Yu Weifeng
* Function List :
* Last Modified :
* History :
******************************************************************************/
#ifndef _REALIZE_ENCAPSULATION_H
#define _REALIZE_ENCAPSULATION_H void SetPara(char *i_strIp,unsigned short i_wPort);//公有函数声明
void GetPara(char *o_strIp,char i_strIpMaxLen,unsigned short *o_wPort);//公有函数声明
#define newParaOpr {SetPara,GetPara} //类似构造函数 typedef struct ParaOpr
{
void (*SetPara)(char *i_strIp,unsigned short i_wPort);
void (*GetPara)(char *o_strIp,char i_strIpMaxLen,unsigned short *o_wPort);
}T_ParaOpr;//定义类 #endif
RealizeEncapsulation.h
/*****************************************************************************
* Copyright (C) 2017-2018 Hanson Yu All rights reserved.
------------------------------------------------------------------------------
* File Module : RealizeEncapsulationNoStaticVariable.c
* Description : 整个文件只包含类相关的操作
* Created : 2017.07.02.
* Author : Yu Weifeng
* Function List :
* Last Modified :
* History :
******************************************************************************/
#include"stdio.h"
#include"malloc.h"
#include"stdlib.h"
#include"string.h"
#include"RealizeEncapsulationNoStaticVariable.h" #define NET_IP_MAX_LEN (15)
/*****************************************************************************
-Fuction : InitNetPara
-Description : 私有函数
-Input :
-Output :
-Return :
* Modify Date Version Author Modification
* -----------------------------------------------
* 2017/06/29 V1.0.0 Yu Weifeng Created
******************************************************************************/
static void InitNetPara(char *i_strIp,unsigned short *i_pwPort)
{
strncpy(i_strIp,"218.17.161.66",NET_IP_MAX_LEN);
*i_pwPort=;
} /*****************************************************************************
-Fuction : SetNetPara
-Description : 公有函数
-Input :
-Output :
-Return :
* Modify Date Version Author Modification
* -----------------------------------------------
* 2017/06/29 V1.0.0 Yu Weifeng Created
******************************************************************************/
void SetNetPara(T_NetParaOpr *i_ptNetParaOpr,char *i_strIp,unsigned short i_wPort)
{
strncpy(i_ptNetParaOpr->strIp,i_strIp,NET_IP_MAX_LEN);
i_ptNetParaOpr->wPort=i_wPort;
}
/*****************************************************************************
-Fuction : GetNetPara
-Description : 公有函数
-Input :
-Output :
-Return :
* Modify Date Version Author Modification
* -----------------------------------------------
* 2017/06/29 V1.0.0 Yu Weifeng Created
******************************************************************************/
void GetNetPara(T_NetParaOpr *i_ptNetParaOpr,char *o_strIp,unsigned short *o_wPort)
{
if(NULL==i_ptNetParaOpr->strIp||i_ptNetParaOpr->wPort==)
{
InitNetPara(i_ptNetParaOpr->strIp,&i_ptNetParaOpr->wPort);
}
else
{
}
strncpy(o_strIp,i_ptNetParaOpr->strIp,NET_IP_MAX_LEN);
*o_wPort=i_ptNetParaOpr->wPort;
}
RealizeEncapsulationNoStaticVariable.c
/*****************************************************************************
* Copyright (C) 2017-2018 Hanson Yu All rights reserved.
------------------------------------------------------------------------------
* File Module : RealizeEncapsulationNoStaticVariable.h
* Description : RealizeEncapsulationNoStaticVariable operation center
* Created : 2017.06.24.
* Author : Yu Weifeng
* Function List :
* Last Modified :
* History :
******************************************************************************/
#ifndef _REALIZE_ENCAPSULATION_NO_STATIC_VARIABLE_H
#define _REALIZE_ENCAPSULATION_NO_STATIC_VARIABLE_H typedef struct NetParaOpr
{
char *strIp;//也可以使用空指针,函数使用时进行转换,
//但会导致隐含条件,外部传入的类型必须与内部使用的类型一致
unsigned short wPort;//变量放在外面,暴露了数据,破坏了封装性
void (*SetPara)(struct NetParaOpr *i_ptNetParaOpr,char *i_strIp,unsigned short i_wPort);
void (*GetPara)(struct NetParaOpr *i_ptNetParaOpr,char *o_strIp,unsigned short *o_wPort);
}T_NetParaOpr;//定义类 void SetNetPara(T_NetParaOpr *i_ptNetParaOpr,char *i_strIp,unsigned short i_wPort);//公有函数声明
void GetNetPara(T_NetParaOpr *i_ptNetParaOpr,char *o_strIp,unsigned short *o_wPort);//公有函数声明
#define newNetParaOpr(Ip,Port) {Ip,Port,SetNetPara,GetNetPara} //类似构造函数 #endif
RealizeEncapsulationNoStaticVariable.h
运行看一下:
book@book-desktop:/work/projects/test$ gcc -o RealizeEncapsulationTest RealizeEncapsulation.c RealizeEncapsulationNoStaticVariable.c RealizeEncapsulationTest.c
book@book-desktop:/work/projects/test$ ./RealizeEncapsulationTest
GetIP:218.17.161.66,Port:21213
AfterSet,IP:192.168.12.1,Port:12322
AfterSetValue,IP:192.168.1.1,Port:12222
代码中展示了两种实现方式,但显然第一种有静态的更好,封装性更强。
显然,除了上述两种,还有一种方式,即把私有变量放到结构体中也就是类中,但是这样就不存在私有的说法了,外部都可以访问,除
非有团队制度规定不允许访问类中的成员变量(开源出去就不行了,显然不可能所有人都有遵循这个制度),所以这种方
式一般情况下也不太可行。
二、继承:
继承的意义在于代码的复用,子类可以复用父类的代码,从而消除重复,当然子类可以有自己的个性。
C中我们通过结构体中再定义一个结构体,即类里面再定义一个类的方式实现,直接看代码:
继承使用场景:
/*****************************************************************************
* Copyright (C) 2017-2018 Hanson Yu All rights reserved.
------------------------------------------------------------------------------
* File Module : RealizeInheritanceTest.c
* Description : 继承 book@book-desktop:/work/projects/test$ gcc -o RealizeInheritanceTest RealizeEncapsulation.c RealizeInheritance.c RealizeInheritanceTest.c
book@book-desktop:/work/projects/test$ ./RealizeInheritanceTest
FatherGetIP:218.17.161.66,Port:21213
Son:OOP_V1.0.0 * Created : 2017.07.02.
* Author : Yu Weifeng
* Function List :
* Last Modified :
* History :
******************************************************************************/
#include"stdio.h"
#include"malloc.h"
#include"stdlib.h"
#include"string.h"
#include"RealizeInheritance.h" #define STRING_MAX_LEN (15)
/*****************************************************************************
-Fuction : main
-Description : main
-Input :
-Output :
-Return :
* Modify Date Version Author Modification
* -----------------------------------------------
* 2017/06/29 V1.0.0 Yu Weifeng Created
******************************************************************************/
int main(int argc,char **argv)
{
char strIp[STRING_MAX_LEN];
unsigned short wPort; T_ParaOpr tParaOpr=newParaOpr;//创建父类实例化对象
T_VersionParaOpr tVersionParaOpr=newVersionParaOpr(tParaOpr);//创建子类实例化对象 tVersionParaOpr.tParaOpr.GetPara(strIp,STRING_MAX_LEN,&wPort);//访问父类公有函数
printf("FatherGetIP:%s,Port:%d\r\n",strIp,wPort);
tVersionParaOpr.PrintVersion();//访问子类自己的公有函数 return ;
}
RealizeInheritanceTest.c
也可以不创建父类的实例化对象,直接创建子类的实例化对象,在new子类对象的宏定义加入父类的实现函数代替传入结构体,这样就
可以直接new子类了。
被调用者:
/*****************************************************************************
* Copyright (C) 2017-2018 Hanson Yu All rights reserved.
------------------------------------------------------------------------------
* File Module : RealizeInheritance.c
* Description : 整个文件只包含类相关的变量及操作
* Created : 2017.07.02.
* Author : Yu Weifeng
* Function List :
* Last Modified :
* History :
******************************************************************************/
#include"stdio.h"
#include"malloc.h"
#include"stdlib.h"
#include"string.h" static char *g_strSoftVersion="OOP_V1.0.0"; /*****************************************************************************
-Fuction : PrintVersion
-Description : 公有函数
-Input :
-Output :
-Return :
* Modify Date Version Author Modification
* -----------------------------------------------
* 2017/06/29 V1.0.0 Yu Weifeng Created
******************************************************************************/
void PrintVersion()
{
printf("Son:%s\r\n",g_strSoftVersion);
}
RealizeInheritance.c
/*****************************************************************************
* Copyright (C) 2017-2018 Hanson Yu All rights reserved.
------------------------------------------------------------------------------
* File Module : RealizeInheritance.h
* Description :
* Created : 2017.07.02.
* Author : Yu Weifeng
* Function List :
* Last Modified :
* History :
******************************************************************************/
#ifndef REALIZE_INHERITANCE_H
#define REALIZE_INHERITANCE_H
#include"RealizeEncapsulation.h" void PrintVersion(); typedef struct VersionParaOpr
{
T_ParaOpr tParaOpr;//继承父类
void (*PrintVersion)();
}T_VersionParaOpr;
#define newVersionParaOpr(ParaOpr) {ParaOpr,PrintVersion} #endif
RealizeInheritance.h
执行结果:
book@book-desktop:/work/projects/test$ gcc -o RealizeInheritanceTest RealizeEncapsulation.c RealizeInheritance.c RealizeInheritanceTest.c
book@book-desktop:/work/projects/test$ ./RealizeInheritanceTest
FatherGetIP:218.17.161.66,Port:21213
Son:OOP_V1.0.0
关于super,this关键字的实现:如果有函数成员要使用this或者super,则在该成员函数的传参中加入指向本结构体
的指针参数
三、多态:
多态的意思是,类似的形式,各种不同的状态(具体处理可不同),从而消除重复代码,同时对于外部使用着来说调用的形式类似,可减少外部的修改
1.函数的多态性
即函数的重载与覆写,覆写覆盖函数指针即可,至于重载,需要使用可变参数va_args实现参数个数的重载,
除了根据参数个数实现重载以外,还可以实现参数类型的重载(typeof),这主要是利用了 GCC 的内置函数,__builtin_types_compatible_p()和__builtin_choose_expr()
不过,从单一职责原则的角度看,函数重载的使用相对较少,同时C 实现函数重载需要开发人员自己编写很多额外的代码,这也使得 C 语言不太适合用函数重载方式来编写规范的应用程序接口。
原文:http://www.cnblogs.com/haippy/archive/2012/12/27/2835358.html
2.对象的多态性
C实现对象多态性,我们对对象二次赋值即可,对象还是那个对象但内部实现已经可有所不同,也就是是对象转型,直接看代码:
多态使用场景:
/*****************************************************************************
* Copyright (C) 2017-2018 Hanson Yu All rights reserved.
------------------------------------------------------------------------------
* File Module : RealizePolymorphismTest.c
* Description : 多态:类似(几乎相同)的形式,各种不同的状态(具体处理可不同)
book@book-desktop:/work/projects/test$ gcc -o RealizePolymorphismTest RealizeEncapsulation.c RealizePolymorphism.c RealizePolymorphismTest.c
book@book-desktop:/work/projects/test$ ./RealizePolymorphismTest
GetPara:13677905555,Port:12346
AfterSet strPara:123454678,wPara:123
* Created : 2017.07.02.
* Author : Yu Weifeng
* Function List :
* Last Modified :
* History :
******************************************************************************/ #include"stdio.h"
#include"malloc.h"
#include"stdlib.h"
#include"string.h"
#include"RealizePolymorphism.h"
#include"RealizeEncapsulation.h" #define STRING_MAX_LEN (15) /*****************************************************************************
-Fuction : main
-Description : main
-Input :
-Output :
-Return :
* Modify Date Version Author Modification
* -----------------------------------------------
* 2017/06/29 V1.0.0 Yu Weifeng Created
******************************************************************************/
int main(int argc,char **argv)
{
char strPara[STRING_MAX_LEN]={};//字符数组需要长度,防止意外风险
unsigned short wPara; T_ParaOpr tParaOpr=newParaOpr;//创建实例化对象,
//定义后再初始化需要强制转换一下
tParaOpr=(T_ParaOpr)newSmsParaOpr;//创建子类实例化对象,类似向上转型 tParaOpr.GetPara(strPara,STRING_MAX_LEN,&wPara);//相同形式,具体使用哪个不相同
printf("GetPara:%s,Port:%d\r\n",strPara,wPara); strncpy(strPara,"",sizeof(""));
wPara=;
tParaOpr.SetPara(strPara,wPara);//外部不知道具体处理是哪一个
tParaOpr.GetPara(strPara,STRING_MAX_LEN,&wPara);
printf("AfterSet strPara:%s,wPara:%d\r\n",strPara,wPara); return ;
}
RealizePolymorphismTest.c
被调用者:
/*****************************************************************************
* Copyright (C) 2017-2018 Hanson Yu All rights reserved.
------------------------------------------------------------------------------
* File Module : RealizePolymorphism.c
* Description : 整个文件只包含类相关的变量及操作
* Created : 2017.07.02.
* Author : Yu Weifeng
* Function List :
* Last Modified :
* History :
******************************************************************************/
#include"stdio.h"
#include"malloc.h"
#include"stdlib.h"
#include"string.h"
#include"RealizePolymorphism.h" #define PHONE_NUM_MAX_LEN (12) static char g_strPhoneNum[PHONE_NUM_MAX_LEN];//私有变量
static unsigned short g_wDeviceId;//私有变量 /*****************************************************************************
-Fuction : InitSmsPara
-Description : 私有函数
-Input :
-Output :
-Return :
* Modify Date Version Author Modification
* -----------------------------------------------
* 2017/06/29 V1.0.0 Yu Weifeng Created
******************************************************************************/
static void InitSmsPara()
{
//多线程可内部加锁
strncpy(g_strPhoneNum,"",PHONE_NUM_MAX_LEN);
g_wDeviceId=;
} /*****************************************************************************
-Fuction : SetSmsPara
-Description : 公有函数
-Input :
-Output :
-Return :
* Modify Date Version Author Modification
* -----------------------------------------------
* 2017/06/29 V1.0.0 Yu Weifeng Created
******************************************************************************/
void SetSmsPara(char *i_strPhoneNum,unsigned short i_wDeviceId)
{
//多线程可内部加锁
strncpy(g_strPhoneNum,i_strPhoneNum,PHONE_NUM_MAX_LEN);
g_wDeviceId=i_wDeviceId;
}
/*****************************************************************************
-Fuction : GetSmsPara
-Description : 公有函数
-Input :
-Output :
-Return :
* Modify Date Version Author Modification
* -----------------------------------------------
* 2017/06/29 V1.0.0 Yu Weifeng Created
******************************************************************************/
void GetSmsPara(char *o_strPhoneNum,char i_strPhoneNumMaxLen,unsigned short *o_wDeviceId)
{
//多线程可内部加锁
if(NULL==g_strPhoneNum||g_wDeviceId==)
{
InitSmsPara();
}
else
{
}
strncpy(o_strPhoneNum,g_strPhoneNum,i_strPhoneNumMaxLen);
*o_wDeviceId=g_wDeviceId;
}
RealizePolymorphism.c
/*****************************************************************************
* Copyright (C) 2017-2018 Hanson Yu All rights reserved.
------------------------------------------------------------------------------
* File Module : RealizePolymorphism.h
* Description :
* Created : 2017.07.02.
* Author : Yu Weifeng
* Function List :
* Last Modified :
* History :
******************************************************************************/
#ifndef REALIZE_POLYMORPHISM_H
#define REALIZE_POLYMORPHISM_H #include<stdbool.h> void SetSmsPara(char *i_strPhoneNum,unsigned short i_wDeviceId);//公有函数声明
void GetSmsPara(char *o_strPhoneNum,char i_strPhoneNumMaxLen,unsigned short *o_wDeviceId);//公有函数声明
#define newSmsParaOpr {SetSmsPara,GetSmsPara} //类似构造函数 typedef struct SmsParaOpr
{
void (*SetSmsPara)(char *i_strPhoneNum,unsigned short i_wDeviceId);//可对操作的传参再封装为结构体,类似于java泛型中的通配符
void (*GetSmsPara)(char *o_strPhoneNum,char i_strPhoneNumMaxLen,unsigned short *o_wDeviceId);//外部并不知道具体操作了结构体中的哪种类型
//即父子类或其他对象可访问结构体的不同部分,外部看起来形式是一致的,并不知道内部使用了哪部分
}T_SmsParaOpr;//定义类 #endif
RealizePolymorphism.h
执行结果:
book@book-desktop:/work/projects/test$ gcc -o RealizePolymorphismTest RealizeEncapsulation.c RealizePolymorphism.c RealizePolymorphismTest.c
book@book-desktop:/work/projects/test$ ./RealizePolymorphismTest
GetPara:13677905555,Port:12346
AfterSet strPara:123454678,wPara:123
详细源码可git clone https://github.com/fengweiyu/oopUseC.git
C之面向对象编程20170707的更多相关文章
- angular2系列教程(六)两种pipe:函数式编程与面向对象编程
今天,我们要讲的是angualr2的pipe这个知识点. 例子
- 带你一分钟理解闭包--js面向对象编程
上一篇<简单粗暴地理解js原型链--js面向对象编程>没想到能攒到这么多赞,实属意外.分享是个好事情,尤其是分享自己的学习感悟.所以网上关于原型链.闭包.作用域等文章多如牛毛,很多文章写得 ...
- PHP 面向对象编程和设计模式 (1/5) - 抽象类、对象接口、instanceof 和契约式编程
PHP高级程序设计 学习笔记 2014.06.09 什么是面向对象编程 面向对象编程(Object Oriented Programming,OOP)是一种计算机编程架构.OOP 的一条基本原则是计算 ...
- Delphi_09_Delphi_Object_Pascal_面向对象编程
今天这里讨论一下Delphi中的面向对象编程,这里不做过多过细的讨论,主要做提纲挈领的描述,帮助自己抓做重点. 本随笔分为两部分: 一.面向对象编程 二.面向对象编程详细描述 ------------ ...
- python基础-面向对象编程
一.三大编程范式 编程范式即编程的方法论,标识一种编程风格 三大编程范式: 1.面向过程编程 2.函数式编程 3.面向对象编程 二.编程进化论 1.编程最开始就是无组织无结构,从简单控制流中按步写指令 ...
- 面向对象编程(OOP)
什么是面向对象编程,对于面向对象编程与面向过程编程的解释随处可见,个人认为对面向对象编程解释最好的一个定义是:依赖倒转原则是面向对象编程的标志,面向对象编程是一种思想,无论使用哪一种编程语言,如果在编 ...
- python 学习笔记7 面向对象编程
一.概述 面向过程:根据业务逻辑从上到下写垒代码 函数式:将某功能代码封装到函数中,日后便无需重复编写,仅调用函数即可 面向对象:对函数进行分类和封装,让开发"更快更好更强..." ...
- 进击的Python【第七章】:Python的高级应用(四)面向对象编程进阶
Python的高级应用(三)面向对象编程进阶 本章学习要点: 面向对象高级语法部分 静态方法.类方法.属性方法 类的特殊方法 反射 异常处理 Socket开发基础 一.面向对象高级语法部分 静态方法 ...
- 进击的Python【第六章】:Python的高级应用(三)面向对象编程
Python的高级应用(三)面向对象编程 本章学习要点: 面向对象编程介绍 面向对象与面向过程编程的区别 为什么要用面向对象编程思想 面向对象的相关概念 一.面向对象编程介绍 面向对象程序设计(英语: ...
随机推荐
- 测试Websocket建立通信,使用protobuf格式交换数据
接到一个应用测试,应用实现主要使用websocket保持长链接,使用protobuf格式交换数据,用途为发送消息,需要我们测试评估性能,初步评估需要测试长链接数.峰值消息数以及长期运行稳定性 整体需求 ...
- 【第二章】MySQL数据库基于Centos7.3-部署
一.MySQL数据库的官方网址: https://www.mysql.com/ https://www.oracle.com/ http://dev.mysql.com/doc/refman/5.7/ ...
- day09,10 函数
一.函数 什么是函数 函数: 对代码块和功能的封装和定义 定义一个事情或者功能. 等到需要的时候直接去用就好了. 那么这里定义的东西就是一个函数. 语法: def 函数名(形参): 函数体 函数名(实 ...
- CSS 实用实例
背景颜色 1. 颜色背景 <style type="text/css">body { font-size: 16px;">h1 { font-size: ...
- Scrum立会报告+燃尽图(十一月十七日总第二十五次):设计调查问卷;修复上一阶段bug
此作业要求参见:https://edu.cnblogs.com/campus/nenu/2018fall/homework/2284 项目地址:https://git.coding.net/zhang ...
- Beta周王者荣耀交流协会第三次Scrum会议
1.立会照片 成员王超,高远博,冉华,王磊,王玉玲,任思佳,袁玥全部到齐. master:王玉玲 2.时间跨度: 2017年11月12日 18:00 — 18:20 ,总计20分钟. 3.地点: 一食 ...
- Unicode 和 UTF-8 有何区别
作者:于洋链接:https://www.zhihu.com/question/23374078/answer/69732605来源:知乎著作权归作者所有,转载请联系作者获得授权. ========== ...
- C++ Primer Plus学习:第六章
C++入门第六章:分支语句和逻辑运算符 if语句 语法: if (test-condition) statement if else语句 if (test-condition) statement1 ...
- 第八章 Mysql运算符
算术运算符 符号 表达式形式 作用 + x1+x2 加法 - x1-x2 减法 * x1*x2 乘法 / x1/x2 除法 div x1 div x2 同上 % x1%x2 取余 mod mod(x1 ...
- 自定义ClassLoader,用于加载用户JAR包
最近在考虑C/S结构程序的软件自动升级的实现方式,比如QQ.飞信等都自动升级的功能. 自动升级模块虽然还没有编码完成,但是思路还是比较清晰的. 自动升级过程中,升级文件的JAR包是专门加载到程序中去的 ...