当前位置导航:炫浪网>>网络学院>>编程开发>>C++教程>>C++进阶与实例

轻轻松松from C to C++

    摘要

    C++技术固然是很时髦的,许多C用户都想在尽可能短的时间内为自己贴上C++的标签。介绍C++的书很多,但只有那些已经侥幸入门的用户才偶尔去翻翻,仍有不少在C++门口徘徊的流浪汉。

    本文只针对C用户,最好是一位很不错的老用户(譬如他在遇到最简单的问题时都尝试着使用指针),通过一些C和更好的C++(本文用的是Borland C++3.1版本)例程介绍有关C++的一些知识,让读者朋友们“浅入深出”,轻轻松松C to C++!

    一、标签!标签!

    快快为你的程序贴上C++的标签,让你看起来很像个合格的C++用户……

    1.注释(comment)
    C++的注释允许采取两种形式。第一种是传统C采用的/*和*/,另一种新采用的则是//,它表示从//至行尾皆为注释部分。读者朋友完全可以通过//使你的代码带上C++的气息,如test0l:

    //test01.cpp
    #include <iostream.h>
    //I'm a C++user!
    //…and C is out of date.

    void main()
    {
           cout<<"Hello world!\n"; //prints a string
    }

 

    Hello-world!

    如果你尝试着在test0l. exe中找到这些高级的注释,很简单,它们不会在那里的。

    2. cincout

    你可能从test0l中嗅出什么味儿来了,在C++中,其次的贵族是cout,而不是很老土的printf ( )。左移操作符’<<’的含义被重写,称作“输出操作符”或“插入操作符”。你可以使用’<<’将一大堆的数据像糖葫芦一样串起来,然后再用cout输出:

    cout << "ASCII code of "<< 'a' << " is:" <<97;

    ASCII code of a is:97

 

    如何来输出一个地址的值呢?在C中可以通过格式控制符”%p”来实现,如:
    printf ("%p,&i);

    类似地,C++也是这样:
    cout << & i;

    但对字符串就不同啦!因为:
    char * String="Waterloo Bridge";
    cout << String; //prints ‘Waterloo Bridge'

    只会输出String的内容。但方法还是有的,如采取强制类型转换:
    cout<<(void *)String;

    cin采取的操作符是’>>’,称作“输入操作符”或“提取操作符”。在头文件iostream.h中有cin cout的原型定义,cin语句的书写格式与cout的完全一样:
    cin>>i; //ok
    cin>>&i; //error. Illegal structure operation

    看到了?别再傻傻地送一个scanf()常用的’&’地址符给它。

    C++另外提供了一个操纵算子endl,它的功能和’\n’完全一样,如test0l中的cout语句可改版为:
    cout << ”Hello world!”<
    3.即时声明
    这是笔者杜撰的一个术语,它的原文为declarations mixed with statements,意即允许变量的声明与语句的混合使用。传统C程序提倡用户将声明和语句分开,如下形式:

    int i=100;
    float f; //declarations
    i++;
    f=1.0/i; //statements

 

    而C++抛弃这点可读性,允许用户采取更自由的书写形式:

    int i=100;
    i++;
    float f =1. 0/i;

 

    即时声明常见于for循环语句中:

    for(int i = 0; i < 16; i++)
                  for(int j = 0; j < 16; j++)
                         putpixel(j i Color[i][j]);

 

    这种形式允许在语句段中任点声明新的变量并不失时机地使用它(而不必在所有的声明结束之后)。

    特别地,C++强化了数据类型的类概念,对于以上出现的”int i=1 j=2;”完全可以写成:
    int i(1) j (2);

    再如:

    char * Stringl("Youth Studio.”);
    char String2[]("Computer Fan.“);

 

    这不属于“即时声明”的范畴,但这些特性足以让你的代码与先前愚昧的C产品区别开来。

    4.作用域(scope)及其存取操作符(scope qualifier operator)
    即时声明使C语言的作用域的概念尤显重要,例如以下语句包含着一条错误,因为ch变量在if块外失去了作用域。

    if(ok)
                  char ch='!';
           else
                 ch='?'; //error. access outside condition

 

    作用域对应于某一变量的生存周期,它通常表现为以下五种:

    块作用域
    开始于声明点,结束于块尾,块是由{}括起的一段区域

    函数作用域
    函数作用域只有语句标号,标号名可以和goto语句一起在函数体任何地方

    函数原型作用域
    在函数原型中的参量说明表中声明的标识符具有函数原型作用域

    文件作用域
    在所有块和类的外部声明的标识符(全局变量)具有文件作用域

    类作用域
    类的成员具有类作用域

 

共3页 首页 上一页 1 2 3 下一页 尾页 跳转到
相关内容
赞助商链接