这几天正在学习C++(非托管,无特别说明以下的C++均指非托管的C++,而非CLR C++),为了快速的学习和加深印象,我对照VB、C#来学习,通过对比他们的相同与不同处达到融会贯通的目的,以下是一些总结或者注意点,希望对其他C++(尤其是之前学习C#)的新手提供一些参考。

我目前的学习资料是《Sams Teach Yourself C++ in One Hour a Day》英文版第六版,相关表述参照了其中的内容,并且以我自己的理解和语言进行描述,不准确的地方请见谅。

1,string即char数组,以'\0'即空字符结尾,如长度为16的字符串可以包含15个字符以及一个空字符;处理字符串有string类型,可以通过strcpy以及strncpy,strcat等函数操作字符串,与C语言类似;在通过std::cin读取字符串的时候尤其应注意空字符,可以通过设定读取长度等解决。

2,指针与C语言类似,在定义以后,应注意将其初始值设置为空指针即0,避免造成相关错误。

3,定义的数组变量即为指向数组第一个元素的指针,可以通过指针方便的操作数组,比如*(数组变量+1)即可获得一个元素的值;应注意区分数组变量指针以及指针类型的数组。

4,内存可以简单的有五个划分:Global namespace、the free store,Registers,Code space,the stack(后进先出);分别用于存储全局变量,局部变量以及方法参数,寄存器数据读取非常快,用于内部维护,比如记录stack的顶部以及命令指针等,code space 用于存储方法代码本身,其余的就是heap;指针可以用于方边操作free store即heap以及类的成员,还可以引用传值等;

5,通过new关键字可以分配heap空间,返回的是指针类型,该指针指向创建的对象;应注意当内存不足的情况,无法分配heap的时候,将返回空指针。

6,在C++中,定义一个变量,运行时即会在stack中为其分配相应的内存空间,无论是class类变量,还是builtin的变量;而在C#中,引用类型的变量如Object类,在实例化后直接在Heap上为其分配内存空间。

SimpleCat myCat; //C++中此处即会创建一个SimpleCat的变量,调用其默认构造函数

7,heap不会自动回收,为了避免内存泄露memory leak,应使用delete关键字回收该内存,一般在类中通过构造函数中初始,然后在析构函数中删除;执行delete后应该将指针设置为0,避免造成再次使用此指针造成程序崩溃等;在C#中,一般我们主要注意非托管资源的释放,而GC可以自动的回收不再使用的内存。

8,C++中的reference是引用,通过 &变量名=变量 的形式进行定义,&reference地址为实际指向变量的地址,reference变量不能够重新复制,只会将新的值赋值给之前的变量,并不会改变引用的地址这和C#中的引用类型不同,以及C++中的指针是可以重新赋值的;reference相当于是一个别名不能为空,而指针可以为空指针,通过这两种方式在函数之间船只类似于C#的ref和out关键字所起作用;在引用传值的时候应尽量使用reference的方式,它更易于理解。

9,虽然可以方便的通过指针进行传值,由于指针暴露了变量在内存中的真实地址,所以是很危险的操作,为了避免被更改,可以使用指向常量的指针,以及指向常量的常量指针来避免在其他函数中被更改的危险;同时应注意区分指向常量的指针以及常量指针,常量指针不能再为指针赋值。

10,C++的很多运算符和C#等比较的类似,不过应注意*以及&等操作运算符的多重含义;循环控制语句等也和C#类似。

11,C++中应注意养成良好的代码书写习惯,同时应注意方法定义declare与方法实现definition的区别,这点习惯了C#的程序员可能最初的时候不会太适应,而且还会遇到 方法吗 not define or found in the scope等编译时的错误。

在我不断的学习过程中,我会不断的更新这篇文章,最后再附上一个Win32的Hello World的 C++版本例子(IDE使用的VS2010)。

#include "iostream"

//methods declaration
void helloWorld();
char pause();

int main()
{
    helloWorld();
    pause();
    return 0;
}

//methods definition
void helloWorld()
{
     using namespace std;
     cout<<"Hello World!"<<endl;
}
char pause()
{
    using namespace std;
    cout <<endl << "Please input any charactor to exit." << endl;
    char c;
    cin >>c;
    return c;
}


About author
Disclaimer
The opinions and comments expressed herein are my own personal opinions and do not represent my employer's view in any way.
Comments
No comments.
Add comment
Title
Title is required.
Name
Name is required.
Email
Please input your personal email with valid format.
Comments
Please input comment content.
Captcha Refresh
Input captcha:

Subscription

Statistics

Locations of visitors to this page