Chinaunix

标题: C++技术水平 [打印本页]

作者: xinxinhao    时间: 2007-09-30 17:37
标题: C++技术水平
问下各位高人...

我一直很疑惑,,,不知道我自己的C++学习到了什么程度,,,

C++到底学到什么水平啦才算学得差不多啦 ????

谢谢..谁能告诉我.

[ 本帖最后由 xinxinhao 于 2007-9-30 17:38 编辑 ]
作者: flw    时间: 2007-09-30 17:46
> C++到底学到什么水平啦才算学得差不多啦 ????
不再问这个问题的时候,就差不多了。
作者: xinxinhao    时间: 2007-09-30 17:48
原帖由 flw 于 2007-9-30 17:46 发表
> C++到底学到什么水平啦才算学得差不多啦 ????
不再问这个问题的时候,就差不多了。



你的回答很玄乎,,,,,,,不知道我能不能达到那个境界
作者: flw    时间: 2007-09-30 17:58
原帖由 xinxinhao 于 2007-9-30 17:48 发表

你的回答很玄乎,,,,,,,不知道我能不能达到那个境界

其实我的回答,意思就是说每个人都应该自信、自省。
可以说,这种问题问别人是没有答案的——你换个角度讲讲,当别人问到你比较擅长的某个领域(比如足球象棋斗地主)“何种水平才算差不多了”时,你该如何回答?
问别人不如问自己,靠别人不如靠自己。

你自己应该搞明白,你会什么,不会什么,想要会什么,然后综合判断下一步该如何做。
作者: jronald    时间: 2007-09-30 18:17
等你搞清楚C++的各种特性为什么要这样设计的时候
作者: drowsyboy    时间: 2007-09-30 19:14
原帖由 flw 于 2007-9-30 17:58 发表

其实我的回答,意思就是说每个人都应该自信、自省。
可以说,这种问题问别人是没有答案的——你换个角度讲讲,当别人问到你比较擅长的某个领域(比如足球象棋斗地主)“何种水平才算差不多了”时,你该如何回 ...


景仰一下flw....
作者: zhujiang73    时间: 2007-09-30 21:55
标题: 回复 #1 xinxinhao 的帖子
原帖由 xinxinhao 于 2007-9-30 17:37 发表
问下各位高人...

我一直很疑惑,,,不知道我自己的C++学习到了什么程度,,,

C++到底学到什么水平啦才算学得差不多啦 ????

谢谢..谁能告诉我.


看懂这个就差不多啦:

http://www.stlchina.org/twiki/bin/view.pl/Main/BoostSource_any

//摘自”boost/any.hpp”

class any
{
        public:
        class placeholder    //泛型数据容器holder的非泛型基类   

        {                    
                public: // structors

                virtual ~placeholder() //虚析构函数,为保证派生类对象能用基类指针析构

                {}
                public: // queries

                virtual const std::type_info & type() const = 0; //提供关于型别的信息

                virtual placeholder * clone() const = 0;  //复制容器

        };
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;template<typename ValueType>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;class holder : public placeholder   //

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;public: // structors

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;holder(const ValueType & value) //

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;: held(value)
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{}
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;public: // queries

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;virtual const std::type_info & type() const
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return typeid(ValueType);  //typeid返回std::typeinfo对象引用,后者包含任意

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//对象的型别信息如name,还提供operator==操作符

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//你可以用typeid(oneObj)==typeid(anotherObj)来比

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//两个对象之型别是否一致

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;virtual placeholder * clone() const
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return new holder(held);  //改写虚函数,返回自身的复制体

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;public: // representation

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ValueType held;  //数据保存的地方

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;};//类定义结束

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;placeholder * content;   //指向泛型数据容器holder的基类placeholder的指针

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;template<typename ValueType>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;any(const ValueType & value)
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;: content(new holder<ValueType>(value)) //模板构造函数,动态分配数据容器并调用其构

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//造函数

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{}
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;...
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;template<typename ValueType>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;any & operator=(const ValueType & rhs)    //与模板构造函数一样,但使用了swap惯用手法

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;any(rhs).swap(*this); //先创建一个临时对象any(rhs),再调用下面的swap函数进行底层

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//数据交换,注意与*this交换数据的是临时对象,所以rhs的底层

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//数据并未被更改,只是在swap结束后临时对象拥有了*this的底

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//层数据,而此时*this也拥有了临时对象构造时所拥有的rhs的数

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//据的副本。然后临时对象由于生命期的结束而被自动析构,*this

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//原来的底层数据随之烟消云散。

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return *this;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;any & swap(any & rhs)   //swap函数,交换底层数据

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;std::swap(content, rhs.content); //只是简单地将两个指针的值互换

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return *this;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;~any()  //析构函数

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;delete content; //释放容器,用的是基类指针,这就是placeholder需要一个虚

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//析构函数的原因

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;...
};

作者: huayd    时间: 2007-09-30 22:10
标题: 回复 #7 zhujiang73 的帖子
这个我还真看的懂

以前就看过stl源码,也还看过一些boost的源码
作者: converse    时间: 2007-10-01 00:33
明白自己要找的答案在哪里找得到,不犯基本的错误,能顺利应付工作所需--满足以上三个条件就应该是"差不多"了.
作者: zwylinux    时间: 2007-10-01 00:38
原帖由 converse 于 2007-10-1 00:33 发表
明白自己要找的答案在哪里找得到,不犯基本的错误,能顺利应付工作所需--满足以上三个条件就应该是"差不多"了.

converse大哥从实际出发
作者: liu1061    时间: 2007-10-01 10:12
C++就像少林寺的功夫而博大精深!  得用一生来学习,呵呵!! 当你自认为有6层功力的时候就很不错了!
作者: zhujiang73    时间: 2007-10-01 11:37
标题: 回复 #8 huayd 的帖子
原帖由 huayd 于 2007-9-30 22:10 发表
这个我还真看的懂

以前就看过stl源码,也还看过一些boost的源码



那就可以毕业了。     boost::any 是很经典的 C++ 代码, C++ 几乎已经精锐尽出了,不过使用 boost::any 还是比较简单的。 C++ 用语法和扩展库的复杂,换取了应用编程的简单清晰,完成同样功能 C++ 的代码通常比等效的 C 代码简单。
作者: evaspring    时间: 2007-10-01 11:56
原帖由 zhujiang73 于 2007-10-1 11:37 发表



那就可以毕业了。     boost::any 是很经典的 C++ 代码, C++ 几乎已经精锐尽出了,不过使用 boost::any 还是比较简单的。 C++ 用语法和扩展库的复杂,换取了应用编程的简单清晰,完成同样功能 C++ 的代 ...


我一点都不懂~~~~
















































那是不可能滴~!
作者: janusle    时间: 2007-10-02 19:13
我始终认为CPP是非常难以驾驭的语言。太复杂了。很难用它写出高质量的代码。
作者: Guang-Yuan.Wang    时间: 2007-10-02 21:32
当你能用C写出等效的C++代码时,对C++的理解就差不多了
作者: zhujiang73    时间: 2007-10-03 11:28
标题: 回复 #15 Guang-Yuan.Wang 的帖子
原帖由 Guang-Yuan.Wang 于 2007-10-2 21:32 发表
当你能用C写出等效的C++代码时,对C++的理解就差不多了



当你能写出 C++ 的编译器时,就是精通  C++  了。
作者: zhujiang73    时间: 2007-10-03 11:34
标题: 回复 #7 zhujiang73 的帖子
原帖由 zhujiang73 于 2007-9-30 21:55 发表


看懂这个就差不多啦:

http://www.stlchina.org/twiki/bin/view.pl/Main/BoostSource_any

//摘自”boost/any.hpp”

class any
{
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;public:
&nb ...



对了,这里没有多重继承。 多重继承比较麻烦,容易出错,我是能不用就不用,  很多语言甚至就不支持多重继承。
作者: anank    时间: 2007-10-05 16:16
原帖由 zhujiang73 于 2007-9-30 21:55 发表


看懂这个就差不多啦:

http://www.stlchina.org/twiki/bin/view.pl/Main/BoostSource_any

//摘自”boost/any.hpp”

class any
{
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;public:
&nb ...


不错的帖子
作者: cheng_lai_shun    时间: 2007-10-05 17:23
太强了,看来我还没有入门
多多跟各位大哥学习!
作者: yuanchengjun    时间: 2007-10-05 18:20
标题: 用独孤求败的四把剑来代表四个境界,剩下的自己想吧。
凌厉刚猛,无坚不摧,弱冠前以之与河朔群雄争锋。
紫薇软剑,三十岁前所用,误伤义士不祥,乃弃之深谷。
重剑无锋,大巧不工。四十岁前恃之横行天下。
四十岁后,不滞于物,草木竹石均可为剑。
作者: yuanchengjun    时间: 2007-10-05 18:24
楼主是问“利剑”之“凌厉刚猛”要连到什么程度,
这个问题很多人都答不上,其实“不滞于物”才是大家想说的。




欢迎光临 Chinaunix (http://bbs.chinaunix.net/) Powered by Discuz! X3.2