`
tmj_159
  • 浏览: 707023 次
  • 性别: Icon_minigender_1
  • 来自: 永州
社区版块
存档分类
最新评论

C++ 学习笔记 (基本语言)

 
阅读更多

第二篇 基本语言

 

1.文字常量

      当一个数值,1,出现在程序中时,它被称为文字常量,称之为“文字”是因为我们只能以它的值的形式指代它,称之为常量是因为它的值不能改变。每个文字常量都有相应的类型,如0,3.1415926。文字常量是不可以寻址的,尽管它的值存在内存的某个地方,但是我们没有办法访问它的地址。PS:其实就是JAVA中的常量。

 

2.命名风格

    对象名一般小写

    标识符用 有意义的名字

    多个词之间用下划线或者内嵌的每个词首字母大写(驼峰法)

 

3.指针

    指针持有另一个对象的地址,使我们能够间接的操作这个对象。

    每个指针都有一个相关的类型,不同数据类型的指针之间的区别不在指针的表示上,也不在指针所持有的值(地址)上,对所有类型的指针来说,他们是一样的。不同之处在于,指针所指的对象的类型上。指针的类型可以指示编译器怎样解释特定地址上内存的内容,以及该 内存区域应该跨越多少内存单元。

     当指针持有0值时,表示它没有指向任何对象。

     指针不能持有非地址值,并且不能被初始化或赋值其它类型的对象的地址。

     空类型指针(void*)可以被任何数据指针类型的地址赋值(函数指针不能赋值给它)

 

4.字符串

  C++ 提供了两种字符串表示:C风格的字符串和标准C++引入的string类类型。一般我们建议使用string类。

   C风格的字符串,字符串被存在一个字符数组中,一般通过一个char* 类型的指针来操纵它,标准C库为操纵C风格的字符串提供了一组函数。

   int strlen( const char*) //字符串长度

   int strcmp(const char*,const char*)//比较两个字符串是否相等

   char* strcpy(char* ,const char*) //字符串拷贝

   要使用这些函数我们必须要包含cstring 头文件

    #include <cstring>

    指向一个C风格的字符串指针总是指向一个关联的字符数组。即使当我们写一个字符串常量时,系统内部也会把字符串常量存在一个字符数组中。

const char* st="this is a test\n";

 

    string类型

    使用标准C++ 引入的string类型需要引入 string 头文件

    #include <string>

    string str="this is a test string";

 

5.const 用法

  const修饰变量或者指针,表示所修饰的变量或者指针不可变

 对于指针有一下几种情况

a.            const char *pContent;

b.            char* const pContent;

c.            char const *pContent;

d.           const char* const pContent;

   区别方法是:沿着* 划一竖线,如果const*的左边,则const用来修饰指针所指示的变量,即指针指向一个常量。如果const *的右侧,则const用来修饰指针本身,即指针本身是常量.

 

6.布尔类型

布尔类型的对象可以被赋值true或者false,例如

 bool b=false;

虽然布尔类型的对象也被看做是一种整数类型的对象,但是它不能声明为signed,unsigned,short或long。

   

7. 枚举类型

enum open_modes{input=1,output,append};

不能打印枚举成员的成员名,不能对枚举成员进行迭代。

 

8.  数组类型

     数组是一个单一数据类型对象的集合。

     定义一个数组

     int ia[10];

     int ia[]={1,2,3};

     const char ca[4]="c++"; //字符串最后有一个空白的终止空字符,所以长度是4

 

     一个数组不能被另外一个数组初始化,也不能被赋值给另外一个数组。

    int ia2[]=ia;// 错误,JAVA中可以

    为什么不可以,个人理解,因为 int *p=ia; 是可以的。单独的ia代表一个地址。

 

9.typedef

   typedef 机制为我们提供了一种通用的类型定义方法,可以用来为内置的或用户定义的数据类型引入助记符号。

   注意以下例子

    typedef char* mstring;

    extern const mstring cstr;

    上面定义了一个指向字符的const  指针,即 char* const cstr; 当在一句话中看不到指针的标识(*)时,即可以把它当做普通的类型,因此const是修饰cstr的,cstr 是一个指向字符的指针。

     不能理解为指向const字符的指针,即 const char* cstr;

 

10. volatile修饰符的主要目的是提示编译器,该对象的值可能在编译器未检测到的情况下被改变,因此编译器不能对引用这些对象的代码做优化处理。想想JAVA中的volatile的语意?

 

11.简单的类

class persion{

public:

string name();

int age();

private:

string _name;

int _age;

}

 

12 sizeof操作符的作用是返回一个对象或类型名的字节长度。返回值的类型是size_t, 这是一种和机器相关的typedef定义,我们可以在cstddef头文件中找到它的定义。

     当sizeof操作符应用在数组上时,返回整个数组的字节长度。

     当sizeof操作符应用在指向数组的指针上是,返回的是指向数组类型的字节长度。

     int *ap = ia;
    cout << "sizeof ia :" << sizeof(ia) << endl; //8
    cout << "sizeof *ap :" << sizeof(*ap) << endl; //4
    string sa[2];
    cout << "sizeof sa :" << sizeof(sa) << endl; //8
    double da[2];
    double *dp=da;
    cout << "sizeof da :" << sizeof(da) << endl; //16
    cout << "sizeof *dp :" << sizeof(dp) << endl; //4

  

13. new 和 delete

 动态内存分配由new表达式应用在一个类型上完成。new表达式返回指向新分配的对象的指针。

int *pi =new int(1024);

int *pa=new int[10];

int pa2[]=new int[10]; //错误, java中可以这样,C++不行,因为new出来的返回值都是地址。

当对象完成使命时,我们必须显示的把对象的内存还给空闲存储区,delete可以帮助我们完成。

delete pi;

delete pa;

 

14 类型转换

隐式转换:低精度到高精度

显示转换:也叫强制类型转化,包括以下强制类型转换符(static_cast,dynamic_cast,const_cast,reinterpret_cast)

       1) 任何非const数据类型的指针都可以赋值给void*类型的指针。

        int *pi=0;

        char *pc=0;

        void *pv;

         pv=pi;

         pv=pc;

 

         int ival;

        const int *pci=&ival;

        pv=pci; //错误

      

         2)void*类型的指针到特殊类型的指针之间不会自动转换,所以不能直接给指针赋一个void*类型的指针。此时需要强制转换。

       pi=pv;//错误

       pi=static_cast<int*>(pv);

 旧式强制类型转换

 前面给出的强制类型转换语法,是标准C++引入的,当我们为C语言或者C++标准之前的编译器编写代码时要用到旧式强制类型转换。标准C++支持旧式的强制类型转换方式。

//旧式C++强制类型转换方式

type (expr)

//旧式C强制类型转换方式

(type) expr

 

       

分享到:
评论

相关推荐

    c++学习笔记精华版

    ### C++ 学习笔记精华版 #### 一、C++ 语言概述 **1、历史背景** - **C++ 的江湖地位** - Java、C、C++、Python、C# 是当前主流的编程语言之一,而 C++ 在这些语言中以其高效性和灵活性著称。 - **C++ 之父 ...

    C++ 学习笔记 整理

    这份"C++学习笔记"涵盖了C++的基础到高级概念,旨在帮助初学者和有一定经验的程序员深入理解并掌握C++。 在C++的学习过程中,以下几个关键知识点是不可或缺的: 1. **基础语法**:C++起源于C语言,因此它保留了...

    C++学习笔记.doc

    总之,C++学习是一个逐步深入的过程,从基本语法到高级特性,都需要时间和实践去掌握。通过阅读本系列的学习笔记,你将有机会逐步建立起对C++和编程的全面理解,从而在编程世界中游刃有余。记住,编程不仅是语言的...

    c++学习笔记.pdf

    标题中的"C++学习笔记.pdf"表明文档是一份关于C++语言的学习记录。C++是一种广泛使用的编程语言,由Bjarne Stroustrup在1980年代初开发,它是一种静态类型、编译式、通用编程语言。C++支持多范式编程,包括过程化、...

    C语言和C++Builder学习笔记.rar_C++笔记_c++学习笔记_c/C++_学习笔记_编程语言

    【C语言和C++Builder学习笔记】 C语言和C++是两种广泛使用的编程语言,它们在软件开发领域占据着重要地位。C语言以其简洁、高效和底层操作能力著称,而C++则在C的基础上引入了面向对象编程,极大地扩展了其应用范围...

    C++学习笔记.docx

    C++学习笔记 本文档提供了C++语言的基础知识,包括输入输出、变量、数据类型、运算符、内存管理、指针、流程控制语句等。 输入输出 C++语言提供了多种输入输出方式,包括使用cin和cout对象。cin对象用于从标准...

    新手C++学习笔记(仅供菜鸟成长参考).rar

    总之,《新手C++学习笔记》是一份全面的入门指南,通过它,初学者不仅可以掌握C++的基本语法,还能了解到实际编程中的最佳实践和陷阱。无论你是自学C++,还是在学校或工作中使用,这份笔记都能作为宝贵的参考资料,...

    C++整理笔记word版——01 C++学习笔记

    以上内容涵盖了C++编程的基础知识,包括基本的语法元素、数据类型、运算符和控制结构。学习这些概念是成为C++程序员的第一步。在实际编程中,还需要理解类、对象、继承、多态等面向对象编程的概念,以及函数、模板、...

    C++学习笔记经典(与C比较)

    《C++学习笔记经典(与C比较)》这份资料应该会详细讲解这些知识点,并通过实例来帮助读者深入理解C++与C的差异,以及如何在实际编程中应用C++的特性和功能。这份资料可能会涵盖基本语法、类和对象、模板、STL的使用...

    达内学生的C++学习笔记

    《达内学生的C++学习笔记》以其结构化的教学方式,帮助学习者逐步掌握C++语言,从基础概念到实际应用,全面覆盖了C++学习的各个阶段。无论是自学还是作为课堂教材,都能提供有力的支持。通过阅读和实践这些笔记,...

    C & C++学习笔记集合

    这个“C & C++学习笔记集合”显然是一份综合性的资源,旨在帮助学习者深入理解和掌握这两种语言。 C 语言是基础,它的语法简洁明了,对内存管理有直接的控制,是理解计算机底层工作原理的良好起点。C 语言的核心...

    C++学习笔记.chm

    《C++学习笔记》是一部非常实用的资源,适合那些对C++编程语言有着浓厚兴趣或者正在学习C++的初学者。这份笔记详细介绍了C++语言的基础知识、核心概念以及高级特性,旨在帮助读者掌握C++编程的核心技能。 C++是...

    c++primer 学习笔记

    这篇学习笔记主要涉及了C++编程的一些核心概念,包括程序结构、变量、基本类型、初始化与赋值、可读性、常量与引用、typedef、枚举以及标准库中的字符串和向量类型。 1. **程序结构**: - 每个C++程序都必须包含`...

    C++ Prime学习笔记

    【C++ Primer 学习笔记】深入理解C++的基础概念 C++ Primer 是一本广泛使用的C++编程教材,本系列学习笔记旨在探讨那些容易被忽视或引起误解的C++知识点,适合已经具备一定C++基础知识的读者。我们将从C++的基础...

    Visual C++学习笔记

    ### Visual C++学习笔记知识点详解 #### 1. Win32API详解 Win32API是微软为其32位平台提供的应用程序编程接口(Application Programming Interface),适用于所有基于Win32平台运行的应用程序。通过调用Win32 API中...

    danei c++ 学习笔记

    在C++编程语言中,头文件的使用是一个重要的概念。在C++11及更新的版本中,标准库的头文件不再以`.h`结尾,例如`#include&lt;iostream&gt;`代替了传统的`#include&lt;iostream.h&gt;`。同时,为了兼容C语言的头文件,如`stdio.h`...

    C++学习笔记共82页.pdf.zip

    【标题】"C++学习笔记共82页.pdf.zip" 提供的是一个关于C++编程语言的学习资料,其中包含了82页的详细笔记。这个压缩文件可能是为了方便学习者整理和下载,便于他们系统地掌握C++的基础知识和进阶技巧。 【描述】...

    C++学习笔记 C++学习笔记

    【C++语言基础】 C++是一种强类型、面向对象的编程语言,遵循ANSI标准,具有高度的可移植性。...随着学习的深入,还将涉及到类、对象、模板、异常处理、内存管理等更复杂的概念,这些都是C++强大功能的核心。

    C++学习笔记共19页.pdf.zip

    【标题】"C++学习笔记共19页.pdf.zip" 提供的是一个关于C++编程语言的学习资料,其中包含了19页的详细笔记。这个压缩文件可能是为了方便学习者们下载和阅读,以便深入理解C++的核心概念和技术。 C++是一种强类型、...

Global site tag (gtag.js) - Google Analytics