KeyFC欢迎致辞,点击播放
资源、介绍、历史、Q群等新人必读
KeyFC 社区总索引
如果你找到这个笔记本,请把它邮寄给我们的回忆
KeyFC 漂流瓶传递活动 Since 2011
 

C++啊~~我的青春啊~~我哭,达人来帮忙看看吧!

[ 19731 查看 / 84 回复 ]

回复:C++啊~~我的青春啊~~我哭,达人来帮忙看看吧!

不知道楼主想做什么。
这是我猜楼主的意思:

#include "stdafx.h"

#define NONIUS_NEXT  (PosNonius++,Nonius->next)
#define NONIUS_PREV  (PosNonius--,Nonius->prev)
#define NONIUS_HEAD  (PosNonius = 0,head)
#define NONIUS_FOOT  (PosNonius = Lenlist,foot)
#define NONIUS_NULL  (PosNonius = 0,NULL)

typedef unsigned long ulong;

struct Node
{
    ulong value;
    Node *next,*prev;
}*head,*foot;

class TLK
{
private:
    Node *Nonius;
    ulong PosNonius;

    void glideNonius(ulong position)
    {
        if(position>PosNonius)
        {
            while(position>PosNonius)
                Nonius=NONIUS_NEXT;
        }
        else if(PosNonius>position)
        {
            while(PosNonius>position)
                Nonius=NONIUS_PREV;
        }
    }

public:
    TLK()
    {
        Nonius=head;
        PosNonius=0;
    }

    ulong LKgetValue(ulong position)
    {
        glideNonius(position);
        return Nonius->value;
    }

    void Print() const
    {
        printf("PosNonius=%d\n",PosNonius);
    }

    void IsNoniusEquals(Node *pnode) const
    {
        if(pnode==Nonius)
            printf("Yes\n");
        else
            printf("No\n");
    }

};

class TTR : private TLK
{
public:
    TTR()
    {
    }

    ulong TRgetChild(ulong ramusPos)
    {
        return LKgetValue(ramusPos);
    }

    void Print() const
    {
        TLK::Print();
    }

    void IsNoniusEquals(Node *pnode) const
    {
        TLK::IsNoniusEquals(pnode);
    }

};

int main(int argc, char* argv[])
{
    Node testNodes[10];
    head=testNodes;
    foot=testNodes+9;
    for(int i=0;i<9;i++)
    {
        testNodes.next=testNodes+i+1;
        testNodes[i+1].prev=testNodes+i;
        testNodes.value=i;
    }
    testNodes[9].value=9;
    TTR ttr;
    printf("%d\n",ttr.TRgetChild(3));
    ttr.Print();
    ttr.IsNoniusEquals(testNodes+3);
    return 0;
}

执行结果是:
3
PosNonius=3
Yes
没有错误。
分享 转发
KEYFC第二届版杀 - 川澄 舞
TOP

回复:C++啊~~我的青春啊~~我哭,达人来帮忙看看吧!

关于MFC,引用下某人的一段话:“在MFC被设计出来初期,那时的C++编译器还具有很多的限制,并且那时主要的平台还只是16位的Windows。不幸的是,由于MFC被设计成为一个框架,使得我们很难利用新编译器中那些更好的C++特性来改进它,也很难将Windows中的很多新特性添加到MFC中。我不喜欢MFC的地方是它高度依赖DLL的特性——因为它将导致许多兼容性方面的问题;还有就是MFC的整个框架设计——它在应用程序的设计中限定了太多东西。”我本人最恶MFC的一点就是它限定了必须使用Doc/View架构。现在Windows下可用的GUI toolkit当中WTL是最好的了,我现在正在用Python语言实现一个WTL for Python,至于M$的Managed C++,C++/CLI,C#之类,一概无视。
KEYFC第二届版杀 - 川澄 舞
TOP

回复:C++啊~~我的青春啊~~我哭,达人来帮忙看看吧!

以下引用kkkklll在2006-5-16 19:19:17的发言:
个人认为,C#的最大好处就是简洁,与人类的思维更相似。C#的函数,只要大概知道它在哪,在列表上大概翻一下就找到了,因为光看函数名就知道这个东西大概是做什么的,鼠标放在函数上就可以看到更详细的信息,而参数名们都有其特定的意义,表示十分直接。基本上看到一个函数就知道它是干什么的了。看到一个类,打一个.就知道它能实现什么功能了。

所以,只要会语法,会OOP概念,就可以写了。呵呵。

C#不用背函数,是那些像我一样的懒人们的好工具呀,挖沙沙。人类果然是为了更懒而在不断地奋斗着呀。这便是变猪的真谛了。

这还是在给M$的IDE作广告吧。您在IDE里写C++程序,不是一样会有提示和自动完成功能么?难道说C++ Library的类名或者函数名就是比C#的拗口?

以下引用粘土火星在2006-5-17 0:57:58的发言:
=v=其实这段话之前不是还有一句嘛赞MFC的|||“我认为MFC是一个了不起的框架库。”

关于C#和C++之间的关系,这个人也有说到嘛~~~

至于语言、框架库好不好的问题,我觉得还是要看看适不适合需求这个标准衡量,当然需求本身也是个很抽象的东西--__--b

楼上有人说CLR或者JVM节省程序员的时间的观点也得到了印证,但是至于是否浪费了用户的时间这点很难讲,不知道有没有统计C#和C++相比损失的性能和节约时间的比率之类的东西。面向开发的层面不一样,需求不一样,擅长处理的领域也不同,可能游戏里面对性能要求更苛刻一些,但我相信通常情况下软件交付时间越短越能赢得更多的客户(爆),其实程序员的时间一定程度上也算作客户的时间嘛。


他前后说了什么没关系,只要MFC的这些缺点符合事实就行了,人家毕竟是M$的员工,不可能指望他给自己公司拆台吧。实际上,“C++的开发效率比C#或Java低”这种看法本身就是错误的。C++只是语法复杂,学/用的起点高,但是只要掌握了,就会发现C++的许多类库(STL,boost,ATL,WTL,DTL等)用起来比Java或C#的对应物还要顺手,是真正的“简洁+高效”。换句话说,C++是一门难学易用的语言。从这个意义上来说,C#或Java节省的是软件公司培训员工的费用,而不是程序员的时间。
KEYFC第二届版杀 - 川澄 舞
TOP

回复:C++啊~~我的青春啊~~我哭,达人来帮忙看看吧!

回 kkkklll :

如果对M$的IDE对C++的支持不满意,可以用Visual Assist X配合Visual Studio 2005以前的版本,这个为C++定制的插件Intellisence比Visual Studio本身更好;至于Refactor,一些Java IDE早就有了,但除了程序结构很乱的情况,用得上的时候很少。还有编译器,推荐用更标准的Intel C++取代M$自己的(Intel C++编译器可以与Visual Studio集成),像if(i=1)这类错误Intel C++就会产生警告。其次,我列举的这些C++模版库都不是什么底层的东西,STL是标准C++的一部分,提供常用算法和数据结构的高效实现。内存泄漏也可以用STL中的auto_ptr防止。boost是C++标准库的扩展,提供了文本处理、扩展的算法和数据结构、函数对象、内存管理、数学和数值计算、扩展的I/O、词法分析、测试、与Python语言交互等方面的支持。ATL,WTL,DTL分别是用来简化开发COM组件、桌面应用、数据库应用的模版库。如果用C++语言却不用这些强大的库,当然体不到C++的优势了。再次,.net程序发布起来也成问题,现在没有安装.net Framework的Windows用户有很多,.net Framework又有这么多版本,这无疑会造成用户的困扰。最后,即使真的是0.1% 的代码费了99% 的时间,那也用不上C#,更容易使用的语言多的是,例如Python和Ruby,用这些脚本语言更能节约时间,为什么还要用C#呢?

以下引用粘土火星在2006-5-18 8:05:43的发言:

PS:刚刚简单看了一下DX SDK中带的演示
没想到Managed DirectX和原生C++效率差别这么小……
两个程序基本稳定在150fps左右,Managed DirectX浮动范围大一些,当然我本本机器配置不高(AMD Turion MT-28,ATI X200M 分了32M显存orz),可能差距拉不开。

差距比较大的部分在于内存占用……托管代码明显不如C++ =v=bbb

这没什么奇怪,Managed Code自身计算量太小,大部分时间都是消耗在DirectX的Native Code上,所以速度差距不明显。演示Managed DirectX API和用C#写游戏是两回事。
KEYFC第二届版杀 - 川澄 舞
TOP

回复:C++啊~~我的青春啊~~我哭,达人来帮忙看看吧!

以下引用LOVEHINA-AVC在2006-5-20 14:56:00的发言:
如果没有转换限制的语言也能够称为有类型的话……当然,“有类型”和“强类型”之间的界线本来就不是很清楚

另外,BASIC系的语言很多,切不要认为只有名字上带着个BASIC的才能算BASIC系……

你是想说HSP吧,我用HSP写过一个小Demo程序,用了一堆goto和gosub,果然很“BASIC”。

以下引用LOVEHINA-AVC在2006-5-20 14:56:00的发言:
在一个平台无关的应用框架上运行平台相关的OS?不知道要怎样才能做到捏,用.net写个虚拟机然后运行Windows吗?

应该说是用C/C++/Asm写个.net虚拟机,然后Windows在.net上运行,这样Windows本身是平台无关的。不过我想M$也没这个胆。
KEYFC第二届版杀 - 川澄 舞
TOP

回复:C++啊~~我的青春啊~~我哭,达人来帮忙看看吧!

以下引用Miliardo在2006-5-20 14:26:18的发言:

还有……C#似乎只在Windows流行的说……还没有成为标准……那个所谓EXXXXXXX的标准还只能算一家的东西吧……
别跟我说Mono……

C#有ISO标准:ISO/IEC 23270:2003(J#是23271),M$还是有能力让它自己创造的东西成为标准的。但是C++就不一样了,今年2月M$提出将C++/CLI加入ISO C++标准,但被英国否决。
http://arstechnica.com/journals/microsoft.ars/2006/2/3/2760
另外贴几篇C++之父Bjarne Stroustrup的访谈录:
http://www.royaloo.com/bjarne/interviews/bsinterview2005.htm
http://www.royaloo.com/articles/articles_2005/bjarne2005.htm
以下引用LOVEHINA-AVC在2006-5-20 16:46:48的发言:
能够JIT的OS……听起来似乎不错XDDDD

有什么不错的?一个虚拟机上的OS,连Asm都不准你用了。
KEYFC第二届版杀 - 川澄 舞
TOP

回复:C++啊~~我的青春啊~~我哭,达人来帮忙看看吧!

汗……这类符号我一向只当作普通的标点……
KEYFC第二届版杀 - 川澄 舞
TOP

回复:C++啊~~我的青春啊~~我哭,达人来帮忙看看吧!

以下引用Rinrin在2006-5-21 10:44:24的发言:
Visual Studio 2005的IDE就是在.net上运行的吧,俺比较感兴趣的是.net Framwork是如何组织的,比如那个mscoree.dll就是核心组件么?

Visual Studio 2005估计只有新增的功能是基于.net的。2005速度明显比2003慢,但关掉某些Intellisense就变快了。
其实我很想知道一般电脑用户都装了哪些.net或Java写的软件...
KEYFC第二届版杀 - 川澄 舞
TOP