??xml version="1.0" encoding="utf-8" standalone="yes"?>սƵ2019:C++博客 - սƵ2019|սع//www.pppqb.icu/wangkang2009/zh-cnMon, 16 Sep 2019 00:21:36 GMTMon, 16 Sep 2019 00:21:36 GMT60gyp模板 - սƵ2019|սع//www.pppqb.icu/wangkang2009/archive/2018/12/12/216120.htmlwangkangwangkangWed, 12 Dec 2018 07:48:00 GMT//www.pppqb.icu/wangkang2009/archive/2018/12/12/216120.html//www.pppqb.icu/wangkang2009/comments/216120.html//www.pppqb.icu/wangkang2009/archive/2018/12/12/216120.html#Feedback0//www.pppqb.icu/wangkang2009/comments/commentRss/216120.html//www.pppqb.icu/wangkang2009/services/trackbacks/216120.html/Files/wangkang2009/gyp-master.rar

该下载文仉包含一个gyp的VC模板Q?gyp_template.gyp
包含一些常用的~译器参敎ͼ 同时修改了gyp的源码vc2015支持xp v140_xp

wangkang 2018-12-12 15:48 发表评论
]]>
git bash提交github - սƵ2019|սع//www.pppqb.icu/wangkang2009/archive/2017/02/05/214652.htmlwangkangwangkangSun, 05 Feb 2017 08:51:00 GMT//www.pppqb.icu/wangkang2009/archive/2017/02/05/214652.html//www.pppqb.icu/wangkang2009/comments/214652.html//www.pppqb.icu/wangkang2009/archive/2017/02/05/214652.html#Feedback0//www.pppqb.icu/wangkang2009/comments/commentRss/214652.html//www.pppqb.icu/wangkang2009/services/trackbacks/214652.html
git bash提交github
跟着|上的教E进行了一ơgithub的提交, 发现中间q是到了一些问题, 因此再记录一?/div>
环境只针对windows
1. 安装好git后不能直接用gitQ?而是要用git bash
2. 注册好githubq创Z个新的仓?/div>
3. q行gitbash.bat, 产生一个类似cmd的窗? 以下命o行全部在gitbash中执?/div>
4. 产生ssh使用的公?/div>
ssh-keygen.bat -t rsa -C "youemail"
默认产生在C:\Users\Administrator\.ssh
打开id_rsa.pub拯里面的内容到github里的ssh key?/div>
ssh -T git@github.com
验证密钥是否生效
配置git
git config --global user.name "youname"
git config --global user.email "youemail"
5. 用资源管理器创徏一个空目录作ؓ代码目录, 例如c:\test
6. 下蝲代码
cd c:/test
git init
git remote add origin git@github.com:youname/yourep.git
下蝲仓库
git pull origin master
7. 在windows环境中把需要提交的代码拯至test
8. d代码Q提交代?/div>
git add .
d代码或提交代码时会跑Z个vim界面Q??q退?/div>
git commit -m "first commit"
q里必须要写注释Q?不写提示 aborting commit due to empty commit message
git push -u origin master
q里开始出C传的癑ֈ比, 100%后代码提交成?/div>
9. github面hQ?可以看见提交已经生效


wangkang 2017-02-05 16:51 发表评论
]]>Zpandas的股前复权计算 - սƵ2019|սع//www.pppqb.icu/wangkang2009/archive/2015/04/25/210437.htmlwangkangwangkangSat, 25 Apr 2015 01:28:00 GMT//www.pppqb.icu/wangkang2009/archive/2015/04/25/210437.html//www.pppqb.icu/wangkang2009/comments/210437.html//www.pppqb.icu/wangkang2009/archive/2015/04/25/210437.html#Feedback0//www.pppqb.icu/wangkang2009/comments/commentRss/210437.html//www.pppqb.icu/wangkang2009/services/trackbacks/210437.html1. 需要收集分U送股的数据, 姑且UC为分U表Q给一个例?br />
600617的分U表, 股数Q现金,除权?/div>
   0     1           2
0  7     0  2015-04-20
0  0  0.26  2001-07-19
0  0   0.2  2000-08-24
0  0   0.4  1998-07-29
0  0  0.38  1996-06-25
0  2   1.5  1995-05-31
0  0     3  1994-06-06
2. 当然需要有日kU数据, 转换为pd.DataFrame格式Q?最高h最低h{对应的col名称为ohlcv
3. Ҏ除权数据Q?按倒序来复权, 是先复权日期早?br />
def calc_fuquan_use_fenhong(df, df_fenhong):
    """获取复权后的历史数据, 用分U表来计复?nbsp;, 前复?br />    df: 日kU?br />    df_fenhong: 分红?br />    return: df"""
    #日期早的在前?/span>
    df_fenhong = df_fenhong.sort_index(by=2)
    for i in range(len(df_fenhong)):
    gu, money, date = df_fenhong.irow(i)
    if len(df.ix[:date]) < 2:
        continue
    date = agl.df_get_pre_date(df, date)
    if money > 0:
        money = money * 0.1
        df['o'].ix[:date] -= money
        df['h'].ix[:date] -= money
        df['c'].ix[:date] -= money
        df['l'].ix[:date] -= money
    if gu > 0:
        # x = cur / (1+y/10)
        gu = 1+gu/10
        df['o'].ix[:date] /= gu
        df['h'].ix[:date] /= gu
        df['c'].ix[:date] /= gu
        df['l'].ix[:date] /= gu
    return df        
4. l果
                    o          h          l          c         v
2010-06-01   6.158824   6.458824   6.158824   6.158824   1922980
2010-06-02   5.941176   6.294118   5.941176   6.235294    837740
l过试Q?前复权结果与同花,通达信的计算相同


wangkang 2015-04-25 09:28 发表评论
]]>用python把图形{换ؓ文本输出 - սƵ2019|սع//www.pppqb.icu/wangkang2009/archive/2014/03/20/206239.htmlwangkangwangkangThu, 20 Mar 2014 01:36:00 GMT//www.pppqb.icu/wangkang2009/archive/2014/03/20/206239.html//www.pppqb.icu/wangkang2009/comments/206239.html//www.pppqb.icu/wangkang2009/archive/2014/03/20/206239.html#Feedback2//www.pppqb.icu/wangkang2009/comments/commentRss/206239.html//www.pppqb.icu/wangkang2009/services/trackbacks/206239.html
下面的代码可以把囑փ转换成文本, 是从|上的一D늨序改的, 本来是想在控制台使用的, 但输出的文本q大Q?~放q小又会造成像素丢失的情c?br />先脓出来. q个版本适用于文件输出, 可以保持更好的显C效?br />from PIL import Image
import os
def PngToTxt(f):
    Palette={'000':'#'#榛�
    ,'010':'@'#鏆楃?/span>
    ,'020':'/'#~�
    ,'001':'$'#娣辫?/span>
    ,'011':'<'#闈�
    ,'021':'"'#�豢鑹K?/span>
    ,'002':'='#钃�
    ,'012':'\\'#闂�摑鑹K?/span>
    ,'022':'_'#娴呯?/span>
    ,'100':'>'#鏆楃?/span>
    ,'110':'*'#鏆楅_?/span>
    ,'120':'~'#榛勭豢鑹K?/span>
    ,'101':'%'#鏆楃?/span>
    ,'111':'+'#鐏�
    ,'121':'^'#娴呯豢鑹K?/span>
    ,'102':'|'#l�E鍏K?/span>
    ,'112':'!'
    ,'122':'-'
    ,'200':'&'#l�
    ,'210':';'#姗欒?/span>
    ,'220':"'"#榛�
    ,'201':')'#娣辩矇鑹K?/span>
    ,'211':'.'#l夌孩鑹K?/span>
    ,'221':'`'
    ,'202':']'#l�
    ,'212':','
    ,'222':' '#鐧�
    }    
    img = Image.open(f)
    if 0: img = Image.Image
    #~小, l果比较模糊, q是用原比例较好
    #img = img.resize((80,60))
    w,h = img.size[:2]
    print w,h
    result = []
    for i in range(h):
        result1 = []
        for j in range(w):
            pixel = img.getpixel((j,i))[:3]
            result1.append(Palette[''.join([str(int(x//85.3)) for x in pixel])])
        result.append(result1)
    r="\n".join(["".join(x) for x in result])
    print r
    object_file=os.path.splitext(f)[0]+".txt"
    open(object_file,'w').write(r)    



l过一些改q, 下面的代码可以适用于控制台输出

def PngToTxt(f):
    Palette={'000':'#'#榛�
    ,'010':'@'#鏆楃?/span>
    ,'020':'/'#~�
    ,'001':'$'#娣辫?/span>
    ,'011':'<'#闈�
    ,'021':'"'#�豢鑹K?/span>
    ,'002':'='#钃�
    ,'012':'\\'#闂�摑鑹K?/span>
    ,'022':'_'#娴呯?/span>
    ,'100':'>'#鏆楃?/span>
    ,'110':'*'#鏆楅_?/span>
    ,'120':'~'#榛勭豢鑹K?/span>
    ,'101':'%'#鏆楃?/span>
    ,'111':'+'#鐏�
    ,'121':'^'#娴呯豢鑹K?/span>
    ,'102':'|'#l�E鍏K?/span>
    ,'112':'!'
    ,'122':'-'
    ,'200':'&'#l�
    ,'210':';'#姗欒?/span>
    ,'220':"'"#榛�
    ,'201':')'#娣辩矇鑹K?/span>
    ,'211':'.'#l夌孩鑹K?/span>
    ,'221':'`'
    ,'202':']'#l�
    ,'212':','
    ,'222':' '#鐧�
    }    
    img = Image.open(f)
    if 0: img = Image.Image
    #~小, l果比较模糊, q是用原比例较好
    img = img.resize((60,20))
    w,h = img.size[:2]
    #print w,h
    result = []
    for i in range(h):
        result1 = []
        is_empty_line = True
        for j in range(w):
            pixel = img.getpixel((j,i))[:3]
            #result1.append(Palette[''.join([str(int(x//85.3)) for x in pixel])])
            if pixel==(255,255,255):
                s = '222'
            else:
                s = '110'
                is_empty_line = False
            result1.append(Palette[s])
        #去除I
        if is_empty_line == False:
            result.append(result1)
    r="\n".join(["".join(x) for x in result])
    print r
    object_file=os.path.splitext(f)[0]+".txt"
    open(object_file,'w').write(r)

图例Q?br />



wangkang 2014-03-20 09:36 发表评论
]]>
用python发布报告 - սƵ2019|սع//www.pppqb.icu/wangkang2009/archive/2014/03/07/206097.htmlwangkangwangkangFri, 07 Mar 2014 11:32:00 GMT//www.pppqb.icu/wangkang2009/archive/2014/03/07/206097.html//www.pppqb.icu/wangkang2009/comments/206097.html//www.pppqb.icu/wangkang2009/archive/2014/03/07/206097.html#Feedback0//www.pppqb.icu/wangkang2009/comments/commentRss/206097.html//www.pppqb.icu/wangkang2009/services/trackbacks/206097.html
l常用matlab的h有时候会用到publish发布报告的功能, 也就是生成一个html的浏览页Q?而python中貌似就没有q种功能。现在本人做了一个简单的cM功能Q大概的样式如下:





虽然比较陋,但至可以在览器中看了?br />
大概的原理是用发布类替换plQ?因此如果您的pl使用了较多的函数Q?那么需要相应的在Publish中加入类似的代码?br />
 1     def figure(self, id=1):
 2         pl.figure(id)
 3     
 4     def plot(self, *args, **kwargs):
 5         pl.plot(*args, **kwargs)
 6     
 7     def subplot(self, *args, **kwargs):
 8         pl.subplot(*args, **kwargs)
 9     
10     def title(self, s, *args, **kwargs):
11         pl.title(s, *args, **kwargs)
对于要发布的代码Q?只需要在前面加上Publishcd可以?br />
1 from pypublish.publish import *
1     #不发布把该行注销
2     pl = Publish()
3     print 'test python html publish.'
4     for i in range(2):
5         pl.figure(i)
6         pl.plot(np.arange(0,10*(i+1)))
7     pl.show()
当然以上假设您用的都是import pylab as pl
如果不是q种情况该方式就不适用了?br />/Files/wangkang2009/pypublish.rar


wangkang 2014-03-07 19:32 发表评论
]]>
python调用C dll api - սƵ2019|սع//www.pppqb.icu/wangkang2009/archive/2013/08/27/202798.htmlwangkangwangkangTue, 27 Aug 2013 03:34:00 GMT//www.pppqb.icu/wangkang2009/archive/2013/08/27/202798.html//www.pppqb.icu/wangkang2009/comments/202798.html//www.pppqb.icu/wangkang2009/archive/2013/08/27/202798.html#Feedback0//www.pppqb.icu/wangkang2009/comments/commentRss/202798.html//www.pppqb.icu/wangkang2009/services/trackbacks/202798.htmlpython调用c dll api


关键字: python dll调用 npcd转换 double


关于python调用dll的文章有很多Q?本篇主要描述对double数组传参的实玎ͼ 本hq没有发现类似的文章Q?因此书写本文?加以说明?/p>

本文实现主要参考《用pythonq行U学计算》一书, 因此对环境有要求Q?环境需要安装python(x,y)Q?该Y件可以很好的支持numpy库,
否则用sf上下载的numpy安装包直接在python里安装貌D了不生效Q?也就是import numpyp|

下面单讲下实现过E?/p>

1. 制作dllQ?假设dll中有如下的导出函敎ͼ dll名ؓsmooth
// @param: n   数组长度
// @param: x   [input/output] 一l数l?br />// @param: y   [input/output]
// @param: weights   [input]  可ؓ0
// @param: s   [input/output] 单|q回新的xQy长度
int smooth(int n, double* x, double* y, double* weights, double* s);


2. 加蝲dll
import numpy as np
from ctypes import *

dll = np.ctypeslib.load_library('smooth', '.')


3. 执行函数
c里的double?4位的Q?因此单的传参会是32位的Q?比如用下面的实现׃有这L问题
smooth = dll.smooth
#[Warning:下面是一个错误的演示]
#描述参数cd
smooth.argtypes = [c_int, POINTER(c_double), POINTER(c_double), POINTER(c_double), POINTER(c_double)]
#q回值类?br />smooth.restype = c_int
x = [3.2, 3.9, 5.4, 5.9]
x = np.array(x)
y = np.array(x)
w = np.array(0)
s = np.array(10)
smooth(len(x), x.ctypes.data_as(POINTER(c_double)), y.ctypes.data_as(POINTER(c_double)), w.ctypes.data_as(POINTER(c_double)), s.ctypes.data_as(POINTER(c_double)) )

调用后python没有报错Q?但不能得到正的l果Q?q入vc附加pythonq程Q?在函数头加上断点Q?查看参数内存Q?可看出其是以int*方式传入?br />要让python以真正的64位double*传入可用下面的实现
#正确的调?br />smooth.argtypes = [
    c_int,
    np.ctypeslib.ndpointer(dtype=np.float64, ndim=1, flags="C_CONTIGUOUS"), #一l数l,且内存连l的
    np.ctypeslib.ndpointer(dtype=np.float64, ndim=1, flags="C_CONTIGUOUS"),
    np.ctypeslib.ndpointer(dtype=np.float64),
    np.ctypeslib.ndpointer(dtype=np.float64)
]
smooth.restype = c_int
m = [3.2, 3.9, 5.4, 5.9]
x = np.arange(4, dtype=np.float64)
y = np.arange(4, dtype=np.float64)
w = np.cast["float64"](0)
s = np.cast["float64"](10)
for i in range(0, len(m)):
 x[i] = m[i]
 y[i] = m[i]
smooth(len(x), x, y, w, s)

题外? python的参数基本可以看为指针, cM引用{操作都可以L完成

本h对numpy不是很熟Q?可能对于np的参数初始化有更好的方式Q?此处q抛砖引玉吧,

 

 


 



wangkang 2013-08-27 11:34 发表评论
]]>
用vc2010扩展E序改变~辑H口的背景色 - սƵ2019|սع//www.pppqb.icu/wangkang2009/archive/2013/04/17/199509.htmlwangkangwangkangWed, 17 Apr 2013 06:55:00 GMT//www.pppqb.icu/wangkang2009/archive/2013/04/17/199509.html//www.pppqb.icu/wangkang2009/comments/199509.html//www.pppqb.icu/wangkang2009/archive/2013/04/17/199509.html#Feedback0//www.pppqb.icu/wangkang2009/comments/commentRss/199509.html//www.pppqb.icu/wangkang2009/services/trackbacks/199509.html注意Qfor vc2010

1. 用vc2010Z个扩展项?br />

2. 创徏该项目,按照下面囄走完向导?br />





3. 完成后项目徏? 依次修改
STDMETHODIMP CConnect::OnStartupComplete (SAFEARRAY ** /*自定?/ )   // 目加蝲后触?/div>
?br />
STDMETHODIMP CConnect::Exec(BSTR bstrCmdName, vsCommandExecOption ExecuteOption, VARIANT * /*pvarVariantIn*/, VARIANT * /*pvarVariantOut*/, VARIANT_BOOL *pvbHandled) // 选择命o后触?br />
 1 // 目启动后触?/span>
 2 STDMETHODIMP CConnect::OnStartupComplete (SAFEARRAY ** /*自定?/span>*/ )
 3 {
 4     //RunBackGroundChange();
 5     CAddMyComment ac(m_pDTE);
 6     COLORREF clrBlack = 0x00c2c2c2;    // 银色
 7     ac.SetColor(clrBlack);
 8     ac.SetColor(clrBlack);
 9 
10     return S_OK;
11 }
STDMETHODIMP CConnect::Exec(BSTR bstrCmdName, vsCommandExecOption ExecuteOption, VARIANT * /*pvarVariantIn*/, VARIANT * /*pvarVariantOut*/, VARIANT_BOOL *pvbHandled)
{
    *pvbHandled = VARIANT_FALSE;
    if(ExecuteOption == vsCommandExecOptionDoDefault)
    {
        if(!_wcsicmp(bstrCmdName, L"backgroundchange.Connect.backgroundchange"))
        {
            RunBackGroundChange();

            *pvbHandled = VARIANT_TRUE;
            return S_OK;
        }
    }
    return S_OK;
}

 1 
 2 // 改变~辑器背景颜?/span>
 3 void CAddMyComment::ChangeFont(void)
 4 {
 5     CComPtr<EnvDTE::Properties> spProperties;
 6 
 7     // Modify font size
 8     m_spDTE->get_Properties(CComBSTR("FontsAndColors"), CComBSTR("TextEditor"), &spProperties);
 9     CComPtr<EnvDTE::Property> spProperty;
10     spProperties->Item(CComVariant(L"FontSize"), &spProperty);    // FontSize
11     ATLASSERT(spProperty);
12     spProperty->put_Value(CComVariant(11));
13 
14     CComPtr<EnvDTE::Property> spProperty1;
15     spProperties->Item(CComVariant(CComBSTR(L"FontsAndColorsItems")), &spProperty1);    // FontsAndColorsItems
16     ATLASSERT(spProperty1);
17     CComPtr<IDispatch> spDispatch;
18     spProperty1->get_Object(&spDispatch);
19     CComPtr<EnvDTE::FontsAndColorsItems> spFontsAndColorsItems;
20     spFontsAndColorsItems = spDispatch;
21     ATLASSERT(spFontsAndColorsItems);
22 #if 0
23     // 昄颜色命名
24     long count ;
25     spFontsAndColorsItems->get_Count(&count);
26     for(long i=0; i<count; ++i) {
27         CComPtr<EnvDTE::ColorableItems> spColor;
28         spFontsAndColorsItems->Item(CComVariant(i), &spColor);
29         if(spColor) {
30             CComBSTR bstrName;
31             spColor->get_Name(&bstrName);
32             ATLTRACE(L"[%d]%s\n",i, bstrName);
33         }
34     }
35 #endif
36 
37 #if 1
38     // Modify Plain Text Background
39     CComPtr<EnvDTE::ColorableItems> spColorableItems_PlainText;
40     spFontsAndColorsItems->Item(CComVariant(1), &spColorableItems_PlainText);
41     CComPtr<EnvDTE::ColorableItems> spColorableItems_LineNumber;
42     spFontsAndColorsItems->Item(CComVariant(5), &spColorableItems_LineNumber);
43     //CComPtr<EnvDTE::ColorableItems> spColorableItems_Identifier;
44     //spFontsAndColorsItems->Item(CComVariant(L"Identifier"), &spColorableItems_Identifier);
45 
46     COLORREF clrWhite = #ffffff;
47     COLORREF clrBlack = #000000;
48     clrBlack = 0x00c2c2c2;    // 银色
49     COLORREF clrWhite2 = 12632256;
50     clrWhite2 =  clrWhite;
51     OLE_COLOR color;
52     spColorableItems_PlainText->get_Background(&color);
53     if(color == clrBlack) {
54         spColorableItems_PlainText->put_Background(clrWhite);
55         spColorableItems_LineNumber->put_Background(clrWhite);
56         //spColorableItems_PlainText->put_Foreground(clrBlack);
57     }else {
58         spColorableItems_PlainText->put_Background(clrBlack);
59         spColorableItems_LineNumber->put_Background(clrBlack);
60         //spColorableItems_PlainText->put_Foreground(clrWhite2);
61     }
62 #endif
63 }
64 

4. 执行命oQ?q入目后, 在菜单工具下会创Z个菜单项


炚w后Q?会在白色背景和银色间切换Q?初始会进入银色背景?br />

5. 可直接用msi安装包安装该插g, 同时该附件包含源代码
/Files/wangkang2009/backgroundchange.rar













wangkang 2013-04-17 14:55 发表评论
]]>lib W号文g与源码不匚w的问?/title><link>//www.pppqb.icu/wangkang2009/archive/2012/12/07/196076.html</link><dc:creator>wangkang</dc:creator><author>wangkang</author><pubDate>Fri, 07 Dec 2012 05:34:00 GMT</pubDate><guid>//www.pppqb.icu/wangkang2009/archive/2012/12/07/196076.html</guid><description><![CDATA[   今天又犯了一个低U错误, 情况是这LQ?~译好的代码下断点后L与源代码不匹配, 弄了半天才想h主项目没有编译?br /><br />   对于q样的问题应该注意需要编译主目Q?最好的办法是设上依赖项?<img src ="//www.pppqb.icu/wangkang2009/aggbug/196076.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="//www.pppqb.icu/wangkang2009/" target="_blank">wangkang</a> 2012-12-07 13:34 <a href="//www.pppqb.icu/wangkang2009/archive/2012/12/07/196076.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>windows 下VC6制作php扩展dll - սƵ2019|սع//www.pppqb.icu/wangkang2009/archive/2012/08/15/187263.htmlwangkangwangkangWed, 15 Aug 2012 03:00:00 GMT//www.pppqb.icu/wangkang2009/archive/2012/08/15/187263.html//www.pppqb.icu/wangkang2009/comments/187263.html//www.pppqb.icu/wangkang2009/archive/2012/08/15/187263.html#Feedback0//www.pppqb.icu/wangkang2009/comments/commentRss/187263.html//www.pppqb.icu/wangkang2009/services/trackbacks/187263.htmlwindows 下VC6制作php扩展dll

|上有很多该问题的文章, 之所以再写一遍, 是因为我Ҏ他们的文章没有跑通, l合了多人的文章加上一些自q理解
最l解决了q个问题?/p>

1. 下蝲带source的php(v5.2)包及同版本编译好的包(php最好用同版本?, q是vc6~译? 在php.net可下?/p>

2. 解压source包后扑ֈext\skeleton, 复制Z份新的, 目录改名为hello

3. 打开目录里面?dsp, .c, .h, 把里面extname全部替换为hello

4. 把php5ts.lib拯臛_发目录, 修改lib里的依赖php5ts_debug.lib 至php5ts.lib, 修改dll输出到php的ext目录

5. f7~译Q?不出意外应编译通过?注意Q?一定要使用release~译Q?用debug加蝲时不认, 我就因ؓq个问题卡住了很久?/p>

6. php.ini里加入extension=php_hello.dll, 没设|扩展目录的话加上extension_dir = "d:/Progra~1/Apache/PHP/ext/",
重启apache

7. 不出意外Q?在phpinfo()中可以看见hello模块了?/p>

8. 写一个phpQ?内容如下
<?
echo confirm_hello_compiled("kdskf");
?>
面执行后可看见string输出?/p>


参?br />//blog.csdn.net/cyberhero/article/details/5966920

//blog.csdn.net/php_boy/article/details/6456603



wangkang 2012-08-15 11:00 发表评论
]]>
VC到Object-C - սƵ2019|սع//www.pppqb.icu/wangkang2009/archive/2012/02/11/165345.htmlwangkangwangkangSat, 11 Feb 2012 07:34:00 GMT//www.pppqb.icu/wangkang2009/archive/2012/02/11/165345.html//www.pppqb.icu/wangkang2009/comments/165345.html//www.pppqb.icu/wangkang2009/archive/2012/02/11/165345.html#Feedback0//www.pppqb.icu/wangkang2009/comments/commentRss/165345.html//www.pppqb.icu/wangkang2009/services/trackbacks/165345.htmlVC to Object-C

本博客所有文章均为原创, 谢绝转蝲

1. Class
// cd?br />@interface MyTest : NSObject
{
// @private U有Q?@package 
 int num1;
 int num2;
}

// 属?br />@porperty int num1, num2;

// cL?br />-(void) print;
-(int) Test2;

// 多参数函?br />// ҎUCؓsetTo:set2:, 其实是void setTo_set2(int a, int b);
// Object-C和C++比更象一U描q语a
// 调用[mytest setTo : 1 set2 : 3];
-(void) setTo : (int) a set2: (int) b
{
 num1 = a;
 num2 = b;
}

// cM于vc里的static void print2();
// 调用[MyTest print2];  同CMyTest::print2();
+(void) print2;
@end

// cd?br />@implementation MyTest

// ~译器会自动生成cMget,put的方?br />// 不用@porperty, 需要自q实现属性数据的d
@synthesize num1, num2;

-(void) print
{
 // 输出到调试区Q?cMOutputString
 NSLog(@"%i/%i", num1, num2);
}

-(int) Test2
{
 return 10;
}
@end


// 调用
MyTest* p = [[MyTest alloc] init]; // init是NSObject的方法, cMC++里的构造, 不过oc只能用指?br />[p setTo : 1 set2 : 3];
[p print];
[p release];

// 输出
1/3


2. 带分cȝc, 分类是提供一个方法组?br />//1. 分类不能建变?br />//2. 最好不要重载主cȝҎ
//3. 可以不实现分cȝ全部Ҏ
@interface MyTest (MyTestEx)  // 括号里的MyTestEx作ؓMyTestcȝ分类
-(int) add : (int) a;
-(int) sub : (int) a;
@end


@implementation MyTest (MyTestEx)
-(int) add : (int) a
{
 num1 += a;
}
-(int) sub : (int) a
{
 num1 -= a;
}
@end

// 调用
MyTest* p = [[MyTest alloc] init]; 
[p setTo : 1 set2 : 3];
[p add : 1];
[p print];
[p release];

// 输出
2/3


3. 协议
协议是多个类׃n一个方法列表?有点象C++里的虚函数表
协议只负责声明, 实现由引用类负责

// q是一个协议声明, 感觉是vc里的接口声明
// interface NSCopying {
// void* copyWithZone(NSZone* zone) = 0;
// };
@protocol NSCopying
-(id)copyWithZone: (NSZone*)zone;
@optional // 该关键字后的Ҏ可以不实?br />-(void) outline;
@end

// 使用协议, 协议用尖括号包含hQ?攑֜cd或基cdUC?br />// VC里应该是q样class CAddressBook : public CNSObject , public INSCopying {};
@interface AddressBook : NSObject <NSCopying>
@end
// 可以使用多个协议, pVC里的多重l承
// class CAddressBook : public CNSObject , public INSCopying , public INSCoding{};
@interface AddressBook : NSObject <NSCopying, NSCoding>
@end


 



սƵ2019 2012-02-11 15:34 发表评论
]]>