c++ 知识2

来源:互联网 发布:淘宝的实名认证在哪里 编辑:程序博客网 时间:2024/06/05 14:22
  • 函数重载

    https://github.com/hongwangli/study_cpp/blob/master/test_010_reload_template.cpp
    重载是为了减少麻烦才产生的。 打个比方,你为了要计算两个数的和,写了一个函数,如下:

    int   intSum(int   nA,int   nB) {     return   (nA+nB); } //这个只是计算了两个整形的和,或许你还要写一个计算浮点数和的函数: float   floatSum(float   fA,float   fB) {     return   (fA+fB); } //或许你还需要计算一个浮点数和一个整形的和,还需要一个函数: float   float_intSum(float   fA,int   nB) {     return   (fA+(float)nB); }

    甚至,如果你用C++的话,你还会需要一些计算对象之间的和,等等。。。。
    当写了这么多的函数,在实际运用中根据需要选择不同的函数来计算某些类型的和,我想你也记不住这么多函数。用重载吧,只需要记住一个函数名就行了。
    /////////////////////////////////////////////////////////////////////////////

    //函数Fun_Sum的重载 int   Fun_Sum(int   A,int   B) {     return   (A+B); } float   Fun_Sum(float   A,float   B) {     return   (A+B); } double   Fun_Sum(double   A,double   B) {     return   (A+B); } UINT   Fun_Sum(UINT   A,UINT   B) {     return   (A+B); } 

    //等等,可以的话这种重载写数十个也不会重复。
    //好了,以后你想要计算某两个类型的和时(可以是不同类型),不需要去想该用哪个计算和的函数,统统调用函数Fun_Sum就行了,至于到底是其中的哪一个函数在被调用,让编译器去伤脑筋吧。
    重载函数的参数个数、参数类型、参数顺序、这三者中至少要有一个不同,才能进行函数重载,因为调用重载函数就是要根据这个来区分具体的调用哪个函数,而函数的返回值可以相同可以不同

  • 函数模版

    template<typename T>          通用函数定义或template<class T>          通用函数定义

    但是用函数模板只能用于 函数的参数个数相同而类型不同的情况,如果参数个数不同,则不能使用函数模板。

  • 变量定义

    int a;//定义一个整型变量,没有赋值
    int *a; // 定义一个整型的指针变量
    int a(3); int a=3 // 两种形式等价。定义并赋值
    int *p = new int; //开辟一个存放整数的存储空间,p为指向该存储空间的地址(即指针)
    int *p = new int(100); //开辟一个存放整数的空间,并指定该整数的初值为100,p为指向该存储空间的地址
    int *p = new int[3]; // 申请一个整型的动态数组长度为3;返回首元素地址
    new int[5][4]; //开辟一个存放二维整型数组(大小为5*4)的空间,返回首元素的地址
    int 可替换 float,char等。也可以是自定义的struct,class 及模版 T;

  • 头指针,头节点

    如下:

    1. 只是个指针变量,自己没有结点内容,所以自己就能指向某个结点。头结点是node,头指针是phead
      T *phead;
      T *node = new T();
      phead = node;
    2. 是指针,也有结点内容,所以只能使用本身的next指向下一结点了。头结点是phead,头指针也是phead
      T *phead = new T();
      T *node = new T();
      phead->next = node;
  • struct结构体

    看来真像某些人说的,struct与class是小异大同。struct默认访问权限是public,class是private;class有继承,多态机制,而struct没有。

    struct people{string name;int age;};struct node{people peo;node *next;node(people x):peo(x),next(NULL){};}; people p1,p2; p1.name = "howard"; p1.age = 28;  p2.name = "mali";p2.age = 30;  node *n = new node(p1); cout << "n->peo.name: " << n->peo.name << endl;
  • 链表

    一个结构体变量指向首地址,其他节点的地址及数据要逐步去访问,每个结构体指针变量指向一个节点。
    http://blog.csdn.net/lzm18064126848/article/details/50819574
    https://github.com/hongwangli/study_cpp/blob/master/test_011_struct_and_linklist.cpp

  • virtual

    当基类调用virtual修饰的方法时候,则根据多态性调用派生类
    如果基类方法没有virtual修饰,则正常调用基类的静态函数。
    https://github.com/hongwangli/study_cpp/blob/master/test_013_virtual.cpp

  • new创建对象和不用new创建

    http://blog.163.com/zhuandi_h/blog/static/18027028820129169538815/
    http://www.jb51.net/article/40017.htm

  • if else 两条以上的陈述语句必须用{}

    if ()    statement;else    statement;if () {     statement1;      statement2;}
  • break continue

    continue就不执行本次循环后面的语句,直接进入下一次循环
    break也不执行本次循环后面的语句,并且跳出循环,不再执行了

0 0
原创粉丝点击