C++最基础问题

来源:互联网 发布:幂学集训营怎么样知乎 编辑:程序博客网 时间:2024/06/05 09:33
1.学习C++是否必须先了解C? 
 不是,C++与C的公共部分比C还容易学习,由于C++比C的类型检查更严格更富于表现力,因此产生的错误就更少,又由于C++能使你毫不困难地描述更多的事物,因此所需的诀窍就更少,而且可利用的库也要比C多.所要学习的C++子集并不是C的全部.

2.怎样开始学习C++? 

  很显然,这非常依赖于你已经掌握的知识和你学习C++的动机.如果你是个编程新手,我强烈建议你找一位有经验的程序员来帮助你.否则概念性的错误以及程序实际执行过程中所发生的问题将使你的学习大受挫折.
  你需要一本C++学习教程.该教程起到在线帮助文档的作用.其原因是带有足够多代码的编程语言和库文档对概念的解释不见得就很清楚。
  当选择一本书时,要选将标准C++和标准库结合在一块描述的书.如,象字符串的输入应这样;
  string s;// 标准C++风格
  cin>>s;
  而不要象这样:
  char s[MAX];
  scanf("%s",s);
  多看看有丰富编程经验的程序员推荐的书,记住,对任何人来说没有哪一本是最好的,看看ACCU(C和C++用户协会)站点上的书评.
  为了写出合乎习惯的C++语句,应避免简单地用你以前学过的语言的风格写C++代码,仅仅通过改变句子排列顺序是得不到什么进步的.看看《LearningStandard C++ as a New Language》一书中关于如何学习C++的讨论内容.

3.改进C++程序的最好方法是什么?
  这我没法说,主要取决于你如何用它,有很多人都轻视抽象类和模板.相反他们过多地使用casts和宏.

4.对于小的程序C优于C++,对吗?
  我没有这样的观点,我还未见过在不缺好的C++编译器的情况下,有优于C++的C小程序

5.C是C++的子集吗?
  从严格的数学意义上讲,C不是C++的一个子集.有些程序是有效的C程序却不是有效的C++程序,甚至在一些代码的编写方面,C与C++也有不同的意思.不过C++支持C所支持的每一种编程技术.每个C程序从本质上来讲也都可以相同的方式用C++来编写,并且有着相同的时间和空间效率.在几小时内将几万行符合ANSI标准的C程序转换成C++风格的C++程序是常见的.因此C++是ANSIC的超集就像ANSI C是K&R C的超集而ISOC++又是C++的超集一样.
  一般的C程序都符合C++语法,比如Kernighan和Ritchie合著的《The C ProgrammingLanguage》(第二版)中的任何一个例子也都是C++程序.
有关C/C++兼容的问题例子:
  int main()
  {
   double sq2=sqrt(2);
   int s=sizeof('a');
  }
  调用一个未声明的函数是C中不好的风格而在C++中则是不合法的.
  void f();
  void g()
  {
   f(2);
  }
  在C语言中void类型的指针能被转换为任意类型的指针,分配内存的典型做法是调用函数malloc().....
  void * malloc(size_t);
  void f(int n)
  {
   int *p=malloc(n*sizeof(char));
   char c;
   void* pv=&c;
   int *pi=pv;
  }
  注意隐含地将void类型指针转换为int类型的指针会引起潜在的alignment错误.
  从C转换到C++时,需注意C++的关键字要比C来的多
  int class =2;
  int virtual=3;
  除了一些象上面所举的例子外(《The C++ ProgrammingLanguage》(第三版)的附录B中详细列出了标准
  C++与C的这类区别)C++是C的一个超集(附录B可以从网上下载)

6. C++与C有什么区别?
  C++是C的直接后裔,几乎将C当作一个子集而差不多保留了C的全部内容,C++提供了更强的类型检查机制并直接支持范围更广的编程风格.在这种意义上说C++是"更好的C",它支持C语言的编程风格并有更好的类型检查(又不失其原有的高效率).类似的,ANSIC 是比K&R C更好的C,另外C++支持数据抽象,面向对象的编程和类编程(请见《The C++Programming Language》(第3版),可以从网上下载的附录B中讨论了兼容性问题.)
  我还未曾见过哪一个程序用C表达比用C++来得更好(我认为不存在这样一个C程序,其结构与C++完全等价)
  然而,在某些情况下由于C++得不到充分的支持,而使用C更有利.
  要理解有关C++的设计以及C++与C的关系的一些讨论,请见《The Design and Evolution ofC++》; 

7.为什么用C++产生的“Hello World”的程序代码要比用C产生的长十倍?
  在我的机器上不会有这种现象,在你的机器上也不会有.实际上,在我的机器“helloworld”程序的C++版本的目标代码比C要小.没有语言方面的原因使得一种版本的程序代码比另一种的要长.只有一种情况,那就是实现一种语言的人是如何组织标准库的.如果一种版本要比另一版本大得多,则要向大的一方的实现者提出所发现的问题.

8.什么是面向对象的程序设计(OOP)?
  面向对象的设计方法是一种进行程序设计的新方法,它吸取了结构化程序设计的先进思想,为解决程序结构过于复杂而产生。它的思想是在进行程序设计时,把整个问题分成由相关部分组成的组,每个组考虑和组相关的代码和数据,同时这些分组将按层次关系组织起来,每个分组转换为对象的独立单元。面向对象的程序设计语言都具有多态性、继承性、封装性等特点。