zoukankan      html  css  js  c++  java
  • C++之鸡零狗碎

    ========================================================================

    ♦集中关注概念,不要迷失在语言细节中;支持一种逐步推进的学习方式。

    ♦一个定义良好的用户类与内部类的差别仅仅在于其定义方式。

    ♦C++设计目的就是:是较大程序能够以合理的方式构造出来;

      C++特征诸如:能够以一种直截了当的方式去和硬件打交道而不顾及安全性等;将代码隐藏在优美的界面之后。

    ♦程序设计语言有两点:描述执行的动作载体(低级语言,效率高)

    ---------------------为程序员提供一组概念(基于设计的观点,提出诸如对象的概念 使得描述尽可能接近实际问题)

    ♦模板的设计,从根本上说是为了支持静态类型容器和优雅有效地使用这些容器;

    ♦C++编程三部曲:分析(取得对问题的清晰理解)、设计(标识一个解决方案中所涉及的关键概念)、编程(将问题解决方案用语言具体表示出来)

    ----有些概念不能用某个基本类表示,所以可以用户自定义,又因为概念之间不是孤立存在的,所以有了继承、调用等等东西。威力最强大的一种管理复杂性的智力工具就是某种层次性的序关 系,将互相有关的概念组织到一个数型结构中,使最一般的概念为树根。组织起来的结构是一个有向无环图,为了确保有向无环图不会因为某些依赖关系而出现环路,利用到工具是界面和实     现分离(抽象类)。

    ----共性的东西可以通过模板表示。

    ----如何在C++里写出好的程序-“了解你想说什么” 以及 “实践、模仿好作品”。

    ===================================================================

    C++概览:

    ♦过程设计

    ♦模块化设计

    模块:一集相关过程和他所操作的数据组织在一起。

                模块设计---------------------->异常处理

    (界面和实现分离,分别编译)      (要在模块基础之上考虑,哪些模块要处理那些错误)

    ♦数据抽象

    --在这里强调的是设计方法及组织程序的方式而不是语言细节

    --用户定义类型:new->堆或动态存储;

    --具体类:

    --抽象类型:

    子类是父类的具体实现,类只是一个接口(界面),用来将实现与使用分离,实现信息隐蔽。

    --虚函数:

    每个带有虚函数的类都有虚函数表(编译器把虚函数名字装换为指向这些函数的指针表(虚函数表)的一个下标),其开销是在对象里多一个指针

    ♦面向对象

    共性抽象为虚函数并作为基类,体现 层次结构

    ♦通用设计

    --容器(类):模板是一种编译时机制

    --通用型算法:操作容器而又不必知道它是什么类型

     ==================================================================

    STL概览(基本数据结构和在它们上操作的基本算法)

    ♦命名空间:标准库定义在命名空间std中,其每种功能是由头文件提供的;

    ♦字符串:c风格字符串就是以0结尾的字符数组;c_str()函数返回一个指向C风格字符串的指针常量, 内容与string串相同. name.c_str().

    ♦输入输出流:默认情况下cout输出的值都被转换为字符序列

    ♦容器:vector动态数组,随机存储;list 插入删除很快速;map 升序保存它的元素。

    ♦算法:(替换、查找、复制、排序)

    -迭代器:(1)是容器定义的一部分,用户根本不需要知道它的类型。(2)迭代器之间类型差异巨大,因为他是为某种容器量身打造的,去完成某种功能。(3)迭代器是用来处理序列的有用工具,通过while循环实现遍历。在I/O中同样适用,写入输出流从输入流中读取,主要是为了给算法提供参数。

    -谓词:

    ==================================================================

    ♦字符串文字量:

    -定义:“适当个数的const字符数组”,“Bohr”类型就是const char[5];

    -可以给char* 赋值,char* p=“Bohr”;此时,试图改变*p的值结果无定义,如:p[4]='e'//错误

    -char ch[]="Bohr"; ch[0]='R';//可以

    -const char*p="liangpeng"; const char*q="laingpeng";

     p!=q (在运用指针时,==比较的是指针的值(地址),而不是所指的东西)

    ♦数组和指针

    -char* p=“Bohr”;  //strlen(p)=4;sizeof(p)=5

    -对字符数组的遍历,可以用指针或下标,结束都是用’0‘;如何数组没有结束符,则必须以某种方式提供元素个数。

    ♦常量const

    -必须初始化,最常见的用途:作为数组的界和分情况标号;可用enum替代;一个常量数值代表程序的一种假设,但是要有良好的注释;

    -区分const char* pc=“lp”和char *const cp=“lp”;以* 为分界从右向左看。

    ♦引用

    -必须初始化,初始化之后,他总是引用所指的那个对象,除了表象之外,根本没有操作符能操作引用,操作的都是被引用的对象。

    -将右值(临时对象或文字量)约束到非const引用是非法的。

    -对“普通”的T&初始式必须是一个T类型的左值;对于一个const T&的初始式不必是左值,甚至不必是T类型。

    [1].到T的隐式转换;

    [2].将结果存入T类型的临时变量;

    [3].用该临时变量来初始化

    ♦struct

    -其中的对象有对齐性质(编译器在编译程序时会遵循两条原则:一、结构体变量中成员的偏移量必须是成员大小的整数倍(0被认为是任何数的整数倍) 二、结构体大小必须是所有成员大小的整数倍。)。计算时从大到小排列,以取得最小空间浪费。http://blog.csdn.net/csw_100/article/details/5495309

    -struct名字出现之后就可以使用

    struct Link{

          Link*previous;

          Link* successor;

    };

    -只有在看得到完整声明之后才可以声明结构类型对象。

     ♦void*

     =======================================================================

    static_cast (编译时检查)

    用法:static_cast < type-id > ( expression )  把expression转换为type-id类型,但没有运行时类型检查来保证转换的安全性。

    ①用于类层次结构中基类(父类)和派生类(子类)之间指针或引用的转换。
    进行上行转换(把派生类的指针或引用转换成基类表示)是安全的;
    进行下行转换(把基类指针或引用转换成派生类表示)时,由于没有动态类型检查,所以是不安全的。
    ②用于基本数据类型之间的转换,如把int转换成char,把int转换成enum。这种转换的安全性也要开发人员来保证。
    ③把空指针转换成目标类型的空指针。
    ④把任何类型的表达式转换成void类型。
    注意:static_cast不能转换掉expression的const、volatile、或者__unaligned属性。
     
     
    dynamic_cast(运行时检查的转换)
    用法:dynamic_cast <type-id> (expression) 可以在执行期把expression转换为type-id类型,决定真正的类型。Type-id 必须是类的指针、类的引用或者void*;
    如果 downcast 是安全的(也就说,如果基类指针或者引用确实指向一个派生类对象)这个运算符会传回适当转型过的指针。如果 downcast 不安全,这个运算符会传回空指针(也就是说,基类指针或者引用没有指向一个派生类对象)。
    dynamic_cast主要用于类层次间的上行转换和下行转换,还可以用于类之间的交叉转换。在类层次间进行上行转换时,dynamic_cast和static_cast的效果是一样的;在进行下行转换时,dynamic_cast具有类型检查的功能,比static_cast更安全。
  • 相关阅读:
    拾回被剥削的自由,未来实实在在的弹性工作一定成为主流
    探索RequestBody报com.alibaba.fastjson.JSONObject cannot be cast to xxx
    CSM与UEFI
    JS使用onscroll、scrollTop实现图片懒加载
    点击button后刷新了页面
    jQuery中prop和attr区别
    encodeURI、encodeURIComponent
    局中人
    年轻人能为世界做些什么
    JavaWeb中的资源映射
  • 原文地址:https://www.cnblogs.com/lp3318/p/4845014.html
Copyright © 2011-2022 走看看