C++学习笔记01

C++函数:

  C函数潜规则:

      1.默认返回int类型

      2.空参数表示参数个数随意

  C++以上两点作废

  重载/形参/实参/哑元

    哑元: sort(int a[],int n,int method)->sort(int a[],int n,int)     

    函数的声明和定义可以分开,有默认值的参数写在声明定义里不用写以免冲突

  宏函数/内联函数

    基本不用,一是不符合强类型要求,二是副作用取而代之的是内联函数用inline表示。 内联函数会在调用的地方展开函数代码而不是产生调用,跟宏函数一样高效,单却又明确的参数类型没有副作用。是否真正执行inline的要求,完全由编译器自己决定。 

  inline int max(int a,int b)
  {
    return a<b?b:a;
  }

  动态内存管理

    C

      malloc/free/calloc/realloc,返回void*不适用于强类型的C++

     C++

        new 类型

n      new 类型(初始值)

        new 类型[元素个数]

        delete 地址

        delete[] 地址

        new(指定地址)类型:在指定的地方分配内存(少用)

       指定初始值直接用一对空圆括号的称为零初始化

        char* p = new char(); *p ==‘\0‘

        new失败会throw抛出异常导致程序终止,可以用nothrow来在申请内存失败时像C的内存管理函数一样返回NULL,头文件<new>

  古怪的指针:成员指针 Date::*p = &Date::year;

    直接上例子 

  #include<iostream>
  using namespace std;

  struct Date{
    int year;
    int month;
    int day;
    void print(){cout<<year<<‘-‘<<month<<‘-‘<<day <<‘,‘ ;}
  };

  void sort(Date a[],int n, int Date::*p)
  {
    for(int i = 0;i<n;i++)
    for(int j = i+1;j<n;j++)
    if (a[i].*p > a[j].*p)
    swap(a[i],a[j]);
  }

  int main()
  {
    int Date::*p = &Date::year;
    Date a = {2013,1,16},b= {2008,8,8};
    cout<< a.*p<<‘,‘<<b.*p<<endl;
    p = &Date::day;
    cout<< a.*p<<‘,‘<<b.*p<<endl;
    Date x[4] = {a,b,{1970,1,1},{2012,12,21}};
    for(int i = 0 ;i<4;i++)
      x[i].print();
    cout<<endl;
    sort(x,4,&Date::month);
    for(int i = 0 ;i<4;i++)
      x[i].print();
    cout<<endl;
    system("pause");
  }

  引用

    本质上是指针,编译器自动取地址和加星号

    通俗讲法 引用就是变量的别名

    定义:类型& 名字=初始值;

    引用必须初始化,用谁初始化它,它就跟谁是同一体,这种关系一生一世永远不变

    void swap(int& p,int& q)  & 就是跟编译器的约定,编译器把细节隐藏了

    

 #include<iostream>
 using namespace std;

  void swap(int& p,int& q) //void swap(int* p,int* q)
  {
    int t = p;//int t = *p;
    p = q; //*p=*q;
    q = t; //*q=t;
  }

  int main()
  {
    int a=10,b=20;
    swap(a,b); //swap(&a,&b);
    cout<<a<<‘,‘<<b<<endl;
    system("pause");
  }

  特别说明:形参是在调用时由实参初始化,返回值是由返回时由return后面的数据初始化。

    int sum(int a,int b)

    {

      int s = a+b;

      return s;

    }

    int x = sum(3,5);

  引用直接使用变量本身(同一体)而不是复制数据,引用不是新的数据类型而是传递方式

  字符串:

    C风格字符串数组长度问题,忘记末尾的‘\0’

    C++风格的字符串string类型,头文件string,同样支持像字符数组那样按下标访问元素,支持 + +各种比较运算符,不用考虑空间问题,成员函数size() length()都可以取得字符串长度成员函数才c_str()可以返回对应C风格字符串(只读)。

  数组:

    C风格的数组长度一旦确定就不变了,作为参数传递就锐变成地址无法知道长度只能追加一个参数来表示长度

    C++风格的数组用vector<类型>数组名(长度,元素初始值),用法跟数组一样,随时可以调整resize长度,来调整大小,随时可以用成员函数size()来取得元素个数。头文件<vector>

  

时间: 2024-10-11 07:01:26

C++学习笔记01的相关文章

【opengl 学习笔记01】HelloWorld示例

<<OpenGL Programming Guide>>这本书是看了忘,忘了又看,赶脚还是把笔记做一做心里比较踏实,哈哈. 我的主题是,好记性不如烂笔头. ================================================================ 1. 下载glut库 glut库地址为:www.opengl.org/resources/libraries/glut/glutdlls37beta.zip glut全称为:OpenGL Utilit

HTTP 学习笔记01

HTTP   hypertext transfer protocol (超文本传输协议) TCP/IP 协议集中的一个应用层协议 用于定义WEB浏览器与WEB服务器之间交换数据的过程以及数据本身的格式 HTTP 1.0  会话方式 HTTP 1.1 方式 HTTP 请求消息结构 一个请求行,若干消息头,以及实体内容 其中的一些消息头和实体内容都是可选的,消息头和实体内容之间要用空行隔开. GET   方式下是没有实体内容的 POST .PUT.DELETE 方式下请求消息才可以包含实体内容 HT

SWIFT学习笔记01

1.Swift,用来判断option是不是nil,相当于OC的 if(option) if let name = option{ greeting = "if=====" }else{ greeting = "else===" } 2.运行switch中匹配到的子句之后,程序会退出switch语句,并不会继续向下运行,所以不需要在每个子句结尾写break. 3.//使用..创建的范围不包含上界,如果想包含的话需要使用...,集合上,就是[)与[]的关系 for i

C++ GUI Qt4学习笔记01

C++ GUI Qt4学习笔记01 qtc++signalmakefile文档平台 这一章介绍了如何把基本的C++只是与Qt所提供的功能组合起来创建一些简单的图形用户界面应用程序. 引入两个重要概念:一个是“信号和槽”,另一个是“布局”. 窗口部件(widget)是用户界面的一个可视化元素,相当于windows系统中的“控件”和“容器”.任意窗口部件都可以用作窗口. 1.1Hello Qt 正确安装Qt4开发环境,创建工程目录hello,源代码文件名为hello.cpp,进入hello目录 (1

HTML学习笔记01

HTML学习笔记 HTML学习笔记01 一.HTML的定义 1 HTML就是"HyperText Markup Language","超文本标记语言".2 HTML不是<color="red">编程语言,而是一种标记语言.3 标记语言是一套标记标签.4 HTML使用标记标签来描述网页. 二.HTML标签 1 HTML标签是由尖括号包围的关键词.2 HTML标签通常是成对出现的.3 标签对中的第一个标签是开始标签,第二个标签是结束标签.

MVC4 学习笔记01

1 . ASP.NET MVC 中 ActionResult 和 ViewResult 在使用上的区别是什么?要注意什么吗? ActionResult 是一个抽象(abstract)类,ViewResult 只是ActionResult 的一个实现(implementation).如果你确认你返回的是一个视图(view),你可以直接返回类型为ViewResult.ActionResult 有很多的派生类,如果你很确定你要返回的类型,你可以明确的返回该类型.如果你并不是很清楚,或者你根本不想去理解

python学习笔记(01):python和c语言 标识符命名规则比较

python标识符命名规则:标识符的第一个字符必须是字母表中的字母(大写或小写)或者一个下划线(‘ _ ’).标识符名称的其他部分可以由字母(大写或小写).下划线(‘ _ ’)或数字(0-9)组成.标识符名称是对大小写敏感的.例如,myname和myName不是一个标识符.注意前者中的小写n和后者中的大写N.有效 标识符名称的例子有i.__my_name.name_23和a1b2_c3.无效 标识符名称的例子有2things.this is spaced out和my-name. c语言标识符命

C++学习笔记——01

最近准备跳槽的事情,于是把C++翻出来看,顺便做了一些练习,主要是数据结构方面的,就贴在这里做个系列,权当督促自己了. 第一天,写了一个栈,调试了下没什么问题,内存泄露的问题也解决了. 1 #ifndef STACK_H 2 #define STACK_H 3 4 #include "stdlib.h" 5 #include "iostream" 6 7 class Stack 8 { 9 private: 10 typedef int NODE_DATA_TYPE

DirectX10学习笔记&lt;01&gt; 搭建环境-在Visual Studio中配置DirectX

一.工具下载 IDE:Visual Studio 2008 SDK:DirectX SDK,可以从Microsoft的网站上免费下载到.SDK中还包含示例.工具和文档.自带的工具很有用,我们会经常使用其中的DDS纹理工具. 二.设置Visual Studio 2008 菜单栏->Tools->Options... 左边选择Projects and Solutions->VC++ Directories 右边Show directiories for:选择Include files,往下列

【zepto学习笔记01】核心方法$()(补)

前言 在很久之前,我们项目有一个动画功能,功能本身很简单,便是典型的右进左出,并且带动画功能 以当时来说,虽然很简单,但是受限于框架本身的难度,就直接使用了CSS3的方式完成了功能 当时主要使用transform与animation实现功能,并且用了一个settimeout执行回调,然后此事便不了了之了 但是出来混总是要还的,这不,最近相似的东西又提了出来,我们当然可以将原来的那套东西拿来用,但是看着那个settimeout总是不是滋味,因为这样捕捉回调的效果以及可能引起的BUG大家都懂,于是就