`
haoningabc
  • 浏览: 1445059 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

c的书籍

    博客分类:
  • c
c 
阅读更多
http://www.acm.uiuc.edu/webmonkeys/book/c_guide/


http://man.lupaworld.com/content/develop/joyfire/system/8.html
转自一个朋友的空间收藏的

C/C++是最主要的编程语言。这里列出了50名优秀网站和网页清单,这些网站提供c/c++源代码。这份清单提供了源代码的链接以及它们的小说明。我已尽力包括最佳的C/C++源代码的网站。这不是一个完整的清单,您有建议可以联系我,我将欢迎您的建议,以进一步加强这方面的清单。 
1、http://snippets.dzone.com/tag/c/ --数以千计的有用的C语言源代码片段 
2、http://www.hotscripts.com/category/c-cpp/scripts-programs/ Hotscripts --提供数以百计的C和C++脚本和程序。所有程序都分为不同的类别。 
3、http://www.planetsourcecode.com/vb/default.asp?lngWId=3 --超过万行C和C++免费的源代码 
4、http://freshmeat.net/browse/164/ --超过9000个C编写的项目。 
5、http://www.daniweb.com/code/c.html --DANIWEB提供的实用代码段 。 
6、http://www.programmersheaven.com/tags/C/ --programmersheaven.com上的C编程资源。 
7、http://www.ddj.com/code/ddj.html --Dr. Dobb’s Journal的源代码。 
8、http://www.cprogramming.com/cgi-bin/source/source.cgi --C和C + +编程资源。 
9、http://www.codecogs.com/ --CodeCogs是一项协作的开放源码库,C/C++的数值方面的组件。 
10、http://www.google.com/codesearch?q=programming++lang:c&cs_r=lang:c --谷歌代码的C源代码。 
11、http://www.codepedia.com/1/C --CodePedia是一个开放的关于系统编程和其他与电脑有关的议题。 
12、http://www.cis.temple.edu/~ingargio/cis71/code/ --为学生提供的一个简单的C语言程序的列表。 
13、http://www.codeproject.com/?cat=2 --codeproject提供的C/C++资源代码项目。 
14、http://www.thefreecountry.com/sourcecode/cpp.shtml --以下是一些C和C++库的DLL,VCLs,源代码,元件,模块,应用程序框架,类库,源代码片段等,你可以在您的项目中使用而不需要支付费用和版税。 
15、http://people.sc.fsu.edu/~burkardt/cpp_src/cpp_src.html --这是一个全面的关于C++的345个源代码清单。 
16、http://www.cplusplus.com/src/ --C++写的通用控制台程序和Windows程序代码清单。 
17、http://users.cs.fiu.edu/~weiss/dsaa_c++/code/ --C++语言数据结构与算法分析(第二版)的源代码。 
18、http://c.snippets.org/ --C源代码片段。 
19、http://www.bbdsoft.com/downloads.html --C++源代码。 
20、http://www.moshier.net/ 天文学和数值软件源代码 
21、http://cplus.about.com/od/cgames/C_Games_with_Source_Code.htm --游戏有关的C++源代码。 
22、http://cliodhna.cop.uop.edu/~hetrick/c-sources.html --免费的C/C++数值计算源代码。 
23、http://www.mathtools.net/C_C__/Utilities/index.html --C/C++工具。 
24、http://www.programmerworld.net/resources/c_library.htm --免费C++源代码和其它有用的工具。 
25、http://www.cmcrossroads.com/bradapp/links/cplusplus-links.html --布拉德阿普尔顿的C++链接-资源,项目,图书馆,教学和编码。 
26、http://www.robertnz.net/cpp_site.html --这是一个收集了数C/C++网站链接列表的网页。 
27、http://www.josuttis.com/libbook/examples.html --在这里,你可以看到并下载所有的本书的C++标准库例子 。 
28、ftp://66.77.27.238/sourcecode/cuj/ --C/C++用户杂志 
29、ftp://66.77.27.238/sourcecode/wd/ --Windows开发者网络 
30、http://www.einet.net/directory/65892/Developers.htm --C程序 
31、http://www.daniweb.com/code/cplusplus.html --实用代码段。 
32、http://snippets.dzone.com/tag/c --C++源代码 
33、http://www.programmersheaven.com/tags/C --C++编程资源,programmersheaven.com 
34、http://www.google.com/codesearch?hl=en&lr=&q=programming --谷歌代码搜索-C++编程语言 
35、http://www.codepedia.com/1/Cpp --CodePedia是一个开放的关于系统编程和其他与电脑有关的议题的网站。 
36、http://www.codebeach.com/index.asp?TabID=1&CategoryID=3 --C++源代码,Codebeach提供 
37、http://freshmeat.net/browse/165/ --5000项目写的C++编程语言 
38、http://cplus.about.com/od/codelibrary/Code_Library_for_C_C_and_C.htm --代码库C、C + +和C#。 
39、http://www.c.happycodings.com/ --Visual Basic、PHP、ASP技术、C、C++大全。 
40、http://www.blueparrots.com/ --Borland C游戏,图像和声音源代码范例。 
41、http://www.java2s.com/Code/Cpp/CatalogCpp.htm --C++源代码。 
42、http://www.yeohhs.com/modules/mydownloads/ --C与C++电子书和源代码示例。 
43、http://www.brpreiss.com/books/opus4/programs/index.html C++的数学方程和公式源代码。 
44、http://users.cs.fiu.edu/ C++。 
45、http://www.josuttis.com/libbook/examples.html --C++标准库-教程和参考资料。 
46、http://emr.cs.uiuc.edu/~reingold/calendars.shtml Edward M. Reingold's Calendar Book, Papers, and Code。 
47、http://cpp.snippets.org/ --c++源代码档案。 
48、http://ubiety.uwaterloo.ca/~tveldhui/papers/techniques/ --用C和C++的解决科学问题。 
49、http://c.ittoolbox.com/topics/core-c/ --C/C++的IT工具框。 
50、http://www.le.ac.uk/cc/tutorials/c/ccccdbas.html --本文件中包含有大量的C示例程序。



一、

 C++中的struct对C中的struct进行了扩充,它已经不再只是一个包含不同数据类型的数据结构了,它已经获取了太多的功能。

    struct能包含成员函数吗?   能!

    struct能继承吗?          能!!

    struct能实现多态吗?       能!!!

 

     最本质的一个区别就是默认的访问控制,体现在两个方面:
    1)默认的继承访问权限。struct是public的,class是private的。

       写如下的代码:

    struct A

    {

      char a;

    };

    struct B : A

    {

      char b;

    };

    这个时候B是public继承A的。如果都将上面的struct改成class,那么B是private继承A的。这就是默认的继承访问权限。所以我们在平时写类继承的时候,通常会这样写:

    struct B : public A

    就是为了指明是public继承,而不是用默认的private继承。

    当然,到底默认是public继承还是private继承,取决于子类而不是基类。我的意思是,struct可以继承class,同样class也可以继承struct,那么默认的继承访问权限是看子类到底是用的struct还是class。如下:

    struct A{};

    class B : A{};    //private继承

    struct C : B{};  //public继承

 
    2)struct作为数据结构的实现体,它默认的数据访问控制是public的,而class作为对象的实现体,它默认的成员变量访问控制是private的。

    3)“class”这个关键字还用于定义模板参数,就像“typename”。但关键字“struct”不用于定义模板参数。

 

    4) 还是上面所说的,C++中的struct是对C中的struct的扩充,既然是扩充,那么它就要兼容过去C中struct应有的所有特性。例如你可以这样写:

    struct A    //定义一个struct

    {

     char c1;

     int  n2;

     double db3;

    };

    A a={'p',7,3.1415926};  //定义时直接赋值

    也就是说struct可以在定义的时候用{}赋初值。

    向上面的struct中加入一个构造函数(或虚函数),struct也不能用{}赋初值了。的确,以{}的方式来赋初值,只是用一个初始化列表来对数据进行按顺序的初始化,如上面如果写成A a={'p',7};则c1,n2被初始化,而db3没有。这样简单的copy操作,只能发生在简单的数据结构上,而不应该放在对象上。加入一个构造函数或是一个虚函数会使struct更体现出一种对象的特性,而使此{}操作不再有效。事实上,是因为加入这样的函数,使得类的内部结构发生了变化。而加入一个普通的成员函数呢?你会发现{}依旧可用。其实你可以将普通的函数理解成对数据结构的一种算法,这并不打破它数据结构的特性。至于虚函数和普通成员函数有什么区别,我会具体写篇文章讨论。

    那么,看到这里,我们发现即使是struct想用{}来赋初值,它也必须满足很多的约束条件,这些条件实际上就是让struct更体现出一种数据机构而不是类的特性。那为什么我们在上面仅仅将struct改成class,{}就不能用了呢?其实问题恰巧是我们之前所讲的——访问控制!你看看,我们忘记了什么?对,将struct改成class的时候,访问控制由public变为private了,那当然就不能用{}来赋初值了。加上一个public,你会发现,class也是能用{}的,和struct毫无区别!!!

  从上面的区别,我们可以看出,struct更适合看成是一个数据结构的实现体,class更适合看成是一个对象的实现体。

 

二、

关于使用大括号初始化
  class和struct如果定义了构造函数的话,都不能用大括号进行初始化
  如果没有定义构造函数,struct可以用大括号初始化。
  如果没有定义构造函数,且所有成员变量全是public的话,可以用大括号初始化。
关于默认访问权限
  class中默认的成员访问权限是private的,而struct中则是public的。
关于继承方式
  class继承默认是private继承,而struct继承默认是public继承。
  且看如下代码(看看编译器给出的错误信息):

class T1
{
 public:
  void f()
  {
   cout<<"T1::f()"<<endl;
  }
 int x,y;
};
struct T2
{
 int x;
 void f(){cout<<"T2::f()"<<endl;}
};
struct TT1 : T1
{
};
class TT2 : T2
{
};
int main()
{
 TT1 t1;
 TT2 t2;
 t1.f();
 t2.f();
}

关于模版
  在模版中,类型参数前面可以使用class或typename,如果使用struct,则含义不同,struct后面跟的是“non-type template parameter”,而class或typename后面跟的是类型参数。

template <struct X>
void f(X x)
{
}
//出错信息:d:codecpptestcpptestcpptest.cpp(33) : error C2065: 'X' : undeclared identifier



分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics