`

C++学习总结(转)

阅读更多
一、#include “filename.h”和#include <filename.h>的区别

#include “filename.h”是指编译器将从当前工作目录上开始查找此文件

#include <filename.h>是指编译器将从标准库目录中开始查找此文件



二、头文件的作用

    加强安全检测

    通过头文件可能方便地调用库功能,而不必关心其实现方式



三、* , &修饰符的位置

对于*和&修饰符,为了避免误解,最好将修饰符紧靠变量名



四、if语句

不要将布尔变量与任何值进行比较,那会很容易出错的。

整形变量必须要有类型相同的值进行比较

浮点变量最好少比点,就算要比也要有值进行限制

指针变量要和NULL进行比较,不要和布尔型和整形比较



五、const和#define的比较


const有数据类型,#define没有数据类型

个别编译器中const可以进行调试,#define不可以进行调试

在类中定义常量有两种方式

1、  在类在声明常量,但不赋值,在构造函数初始化表中进行赋值;

2、  用枚举代替const常量。



六、C++函数中值的传递方式

有三种方式:值传递(Pass by value)、指针传递(Pass by pointer)、引用传递(Pass by reference)

void fun(char  c)  //pass by value

void fun(char  *str)  //pass by pointer

void fun(char &str)  //pass by reference

如果输入参数是以值传递的话,最好使用引用传递代替,因为引用传递省去了临时对象的构造和析构

函数的类型不能省略,就算没有也要加个void



七、函数体中的指针或引用常量不能被返回

Char *func(void)

{

char str[]=”Hello Word”;

//这个是不能被返回的,因为str是个指定变量,不是一般的值,函数结束后会被注销掉

return str;

}

函数体内的指针变量并不会随着函数的消亡而自动释放



八、一个内存拷贝函数的实现体

void  *memcpy(void *pvTo,const void *pvFrom,size_t size)

{

assert((pvTo!=NULL)&&(pvFrom!=NULL));

byte *pbTo=(byte*)pvTo;    //防止地址被改变

byte *pbFrom=(byte*)pvFrom;

while (size-- >0)

  pbTo++ = pbForm++;

return pvTo;

}



九、内存的分配方式

分配方式有三种,请记住,说不定那天去面试的时候就会有人问你这问题

1、  静态存储区,是在程序编译时就已经分配好的,在整个运行期间都存在,如全局变量、常量。

2、  栈上分配,函数内的局部变量就是从这分配的,但分配的内存容易有限。

3、  堆上分配,也称动态分配,如我们用new,malloc分配内存,用delete,free来释放的内存。



十、内存分配的注意事项

用new或malloc分配内存时,必须要对此指针赋初值。

用delete 或free释放内存后,必须要将指针指向NULL

       不能修改指向常量的指针数据



十一、内容复制与比较


//数组……

char a[]=”Hello Word!”;

char b[10];

strcpy(b,a);

if (strcmp(a,b)==0)

{}

//指针……

char a[]=”Hello Word!”;

char *p;

p=new char[strlen(a)+1];

strcpy(p,a);

if (strcmp(p,a)==0)

{}



十二、sizeof的问题

记住一点,C++无法知道指针所指对象的大小,指针的大小永远为4字节

char a[]=”Hello World!”

char *p=a;

count<<sizeof(a)<<end;    //12字节

count<<sizeof(p)<<endl;   //4字节

而且,在函数中,数组参数退化为指针,所以下面的内容永远输出为4

void fun(char  a[1000])

{

count<<sizeof(a)<<endl;  //输出4而不是1000

}



十三、关于指针

1、  指针创建时必须被初始化

2、  指针在free 或delete后必须置为NULL

3、  指针的长度都为4字节

4、释放内存时,如果是数组指针,必须要释放掉所有的内存,如

char *p=new char[100];

strcpy(p,”Hello World”);

delete []p;   //注意前面的[]号

p=NULL;

5、数组指针的内容不能超过数组指针的最大容易。

如:

char *p=new char[5];

strcpy(p,”Hello World”);  //报错  目标容易不够大

delete []p;   //注意前面的[]号

p=NULL;



十四、关于malloc/free 和new /delete


l         malloc/free 是C/C+的内存分配符,new /delete是C++的内存分配符。

l         注意:malloc/free是库函数,new/delete是运算符

l         malloc/free不能执行构造函数与析构函数,而new/delete可以

l         new/delete不能在C上运行,所以malloc/free不能被淘汰

l         两者都必须要成对使用

l         C++中可以使用_set_new_hander函数来定义内存分配异常的处理



十五、C++的特性

C++新增加有重载(overload),内联(inline),Const,Virtual四种机制

重载和内联:即可用于全局函数,也可用于类的成员函数;

Const和Virtual:只可用于类的成员函数;

重载:在同一类中,函数名相同的函数。由不同的参数决定调用那个函数。函数可要不可要Virtual关键字。和全局函数同名的函数不叫重载。如果在类中调用同名的全局函数,必须用全局引用符号::引用。

覆盖是指派生类函数覆盖基类函数

函数名相同;

参数相同;

基类函数必须有Virtual关键字;

不同的范围(派生类和基类)。

隐藏是指派生类屏蔽了基类的同名函数相同

1、  函数名相同,但参数不同,此时不论基类有无Virtual关键字,基类函数将被隐藏。

2、  函数名相同,参数也相同,但基类无Virtual关键字(有就是覆盖),基类函数将被隐藏。

内联:inline关键字必须与定义体放在一起,而不是单单放在声明中。

Const:const是constant的缩写,“恒定不变”的意思。被const修饰的东西都受到强制保护,可以预防意外的变动,能提高程序的健壮性。

1、  参数做输入用的指针型参数,加上const可防止被意外改动。

2、  按值引用的用户类型做输入参数时,最好将按值传递的改为引用传递,并加上const关键字,目的是为了提高效率。数据类型为内部类型的就没必要做这件事情;如:

将void Func(A a) 改为void Func(const A &a)。

而void func(int a)就没必要改成void func(const int &a);

3、  给返回值为指针类型的函数加上const,会使函数返回值不能被修改,赋给的变量也只能是const型变量。如:函数const char*GetString(void); char *str=GetString()将会出错。而const char *str=GetString()将是正确的。

4、  Const成员函数是指此函数体内只能调用Const成员变量,提高程序的键壮性。如声明函数 int GetCount(void) const;此函数体内就只能调用Const成员变量。

Virtual:虚函数:派生类可以覆盖掉的函数,纯虚函数:只是个空函数,没有函数实现体;



十六、extern“C”有什么作用?

Extern “C”是由C++提供的一个连接交换指定符号,用于告诉C++这段代码是C函数。这是因为C++编译后库中函数名会变得很长,与C生成的不一致,造成C++不能直接调用C函数,加上extren “c”后,C++就能直接调用C函数了。

Extern “C”主要使用正规DLL函数的引用和导出 和 在C++包含C函数或C头文件时使用。使用时在前面加上extern “c” 关键字即可。



十七、构造函数与析构函数


派生类的构造函数应在初始化表里调用基类的构造函数;

派生类和基类的析构函数应加Virtual关键字。

不要小看构造函数和析构函数,其实编起来还是不容易。

#include <iostream.h>

class Base

{

  public:

    virtual ~Base() { cout<< "~Base" << endl ; }

};

class Derived : public Base

{

  public:

    virtual ~Derived() { cout<< "~Derived" << endl ; }

};

void main(void)

{

    Base * pB = new Derived;  // upcast

    delete pB;

}

输出结果为:

       ~Derived

       ~Base

如果析构函数不为虚,那么输出结果为

       ~Base



十八、#IFNDEF/#DEFINE/#ENDIF有什么作用

仿止该头文件被重复引用
分享到:
评论

相关推荐

    c++学习总结(基础)

    很好的c++学习总结(C++学习忠告、类的使用、类与内存分配。。。。。。)

    C++学习总结

    在C++学习中,C Primer是一本经典的入门书籍,C++11是该语言的一个重要版本,它引入了许多新的特性和改进,比如自动类型推导、智能指针、基于范围的for循环、lambda表达式等。Boost是一个C++库集合,包含了许多实用...

    C++学习总结--完善中

    C++个人学习总结- 完善中  -不是很好,但还是拿出来分享一下

    初学者C++学习方法总结

    初学者怎样学习C++,方法,步骤,态度等,C++学习方法总结很详细!

    关于C++的学习总结

    自己总结的一点C++ MFC方向的学习知识点,以后还会不断地学习,总结

    c++学习总结,在学习c++时做的一些笔记

    在深入探讨C++编程语言的学习经验之前,首先要理解C++是一种多范式、面向对象的编程语言,由Bjarne Stroustrup于1983年在C语言的基础上发展而来。它提供了丰富的特性,包括类、模板、异常处理、命名空间、函数重载等...

    关于C++学习的总结报告

    在深入探讨C++学习的总结报告之前,我们首先理解C++是一种强大且广泛应用的编程语言,它具有面向对象、高效和可移植性等特性。实训是学习任何技能的关键环节,尤其是编程,因为理论与实践相结合能更好地巩固知识并...

    C++学习经验总结 C++学习经验总结

    以下是对C++学习的一些关键知识点的总结: 1. **基础知识**:C++起源于C语言,因此掌握C语言的基本语法,如变量、数据类型、运算符、流程控制语句(if-else, switch, for, while)以及函数的使用是学习C++的起点。 ...

    C++ 学习个人总结相关资料.7z

    通过学习《C++ Primer》,不仅可以掌握C++的基本语法和编程技巧,还能理解面向对象编程的核心思想,为后续深入学习C++标准库、STL、设计模式以及并发编程等高级主题打下坚实基础。对于希望从事IT行业的程序员来说,...

    C++学习总结(完全可以应付面试)

    这份"C++学习总结"是为面试准备的,旨在帮助你掌握核心概念并能应对面试中的各种问题。下面我们将深入探讨C++的一些关键知识点。 1. **基础语法**:C++的基础包括变量、数据类型(如int、float、char)、运算符(如...

    C++11学习总结.doc

    #### 三、代码优化总结 通过对 C++98 和 C++11 两个版本的代码进行对比分析,我们可以看到 C++11 在代码结构、资源管理和异常处理方面带来了显著的改进。这些改进不仅让代码更加简洁和易懂,还提高了程序的稳定性和...

    c++课程设计总结 课程设计总结

    本篇总结主要讨论了C++课程设计的重要性和学习体验。通过学习《C++程序设计》,作者学习到了基本的理论知识,了解到了C++语言程序设计的思想,并具备初步的独立分析和设计能力。作者还强调了数据结构的重要性,它是...

    c++概念复习总结

    C++是一种支持多种编程范式的高级编程语言,包括过程化、面向对象和泛型编程。从给出的文件内容中,我们可以总结出...学习C++不仅需要掌握语法,更要理解面向对象编程的思想和原则,以便有效地利用C++进行软件开发。

    C++基础知识总结

    ### C++基础知识总结 ...这些基础知识对于理解 C++ 程序设计至关重要,也是进一步学习面向对象编程的基础。接下来的部分将更深入地探讨 C++ 中的高级特性,如数组、字符串、控制结构、函数、类和对象等。

    C++学习总结[知识点详解]

    这份资源集成了C++学习的多个重要方面,包括基础概念、高级特性、面试常见问题以及内存管理等,非常适合对C++感兴趣或者准备面试的人士进行深入学习。 1. **C++语言概述**:C++是在C语言的基础上发展起来的,它引入...

    Visual C++学习资料

    根据题目描述中的“经典,适合初学者,从例程出发,一步步让学习者进入状态”,这里推荐一些优质的Visual C++学习资源: 1. **官方文档**:微软官方提供的Visual C++文档是非常全面的学习资源,涵盖了从基础知识到...

Global site tag (gtag.js) - Google Analytics