美文网首页
《Visual C++入门很简单》

《Visual C++入门很简单》

作者: 水漾桥 | 来源:发表于2016-10-22 14:02 被阅读250次

    作者/侯晓琴 出版社/清华大学出版社

    目录

    第1篇 Visual C++开发环境及语言基础
    1. 开发环境及常用应用程序框架
    2. C++入门基础
    3. C++面向对象编程基础
    4. MFC运行机制
    第2篇 Visual Studio图形编程
    1. 结合实例详解Windows标准控件
    2. 菜单
    3. 编辑工具栏和状态栏
    4. 图形图像
    第3篇 Visual C++程序开发基础篇
    1. 数据文件读写
    2. 动态链接库
    第4篇 Visual C++程序开发提高篇
    1. 多线程
    2. 网络编程
    3. 数据库编程
    4. 标准模板库(STL)
    5. 电子书管理系统

    第一章 开发环境及常用应用程序框架

    Visual C++是Microsoft公司开发的基于C/C++的可视化的集成开发工具,提供了Microsoft基本类库MFC。

    #include<iostream> //输入输出语句的头文件
    using namespace std; //std作用域
    cin>> <变量名> ; //输入语句
    cout<<"输出的内容"<< <变量名> <<endl; //输出语句(endl换行)
    return 0; //返回值
    

    按F5调试程序 Ctrl F5运行程序
    机器语言→汇编语言→高级语言C
    C语言:结构式语言——显著特点:代码及数据的分隔化
    C→面向过程 / C++→面向对象
    C+class→ C++
    C++三大特性:封装继承多态
    MFC应用程序有3种类型:基于单文档、基于多文档、基于对话框
    MFC程序员常用3个类:CRect(限定一个区域)、CPoint(定义一个点的二维坐标值)、CString(对string的各种操作封装起来变成一个只能在MFC下使用的类)
    MFC窗口类WNDCLASS(并不是一个真正意义上的类)
    .cpp→ .obj→ .exe
    语法错误→ 跟踪调试
    调试菜单→ 新建断点→ 跟踪调试程序(跟屁虫式跟踪(逐语句/逐过程)F11、守株待兔式跟踪F5)

    Win32应用程序(Win32 Application)

    入口函数是WinMain()(有且只有一个),是基于Windows平台的32位开发环境开发的应用程序,也是普通的窗口应用程序。有注册窗口、创建窗口、显示窗口、消息处理等动作
    Windows应用程序→ 空项目
    一个基本的Win32应用程序要包括两个函数:WinMain()和实现窗口操作函数
    应用场合:针对需要重新编写窗口

    Win32控制台程序(Win32 Console Application)

    入口函数是main()(有且只有一个),运行结果窗口是MS-DOS的样子,因为它是基于DOS平台开发的应用程序
    应用场合:针对需要测试完善的代码,以便移植到其他框架下使用

    MFC应用程序(MFC Application)

    入口函数是WinMain()(在工作区的文件中看不到)
    应用程序类型→ 单文档 不添加任何代码,MFC单文档程序就能运行出结果
    应用场合:以MFC应用程序为基本框架继续开发自己的软件,可以省去一大部分工作内容

    MFC动态链接库(MFC DLL)

    针对MFC应用程序的动态链接库,入口函数为DllMain(),类似于MFC应用程序中的WinMain(),在自动生成的文件是看不到的
    DLL类型→ 使用共享MFC DLL的规则DLL
    这种项目运行结果是没有窗口的,因为它生成的并不是可执行文件,而是以.dll.lib为后缀名的两个文件。如果想看结果,只需将其复制粘贴到可执行程序的当前路径下,并且让可执行程序调用其结果即可。
    应用场合:当所编的程序不希望被权限之外的人看到源代码,以期保护原作者的权益,或者代码被封装成接口让别人使用,只要凭借输入输出参数即可运用。
    开发环境:将多个项目形成一个集合、格式不规范的代码被自动对齐(Ctrl K F(注意顺序))

    第二章 C++入门基础

    C++全面性(界面开发不如VB、应用软件的开发效率不如Java、代码运行效率不如C)
    C++数据类型分为基本与构造两大块

    • 基本类型:整型(基本整型int、短整型short、长整型long、无符号型unsigned)、实型(浮点型)(单精度型float、双精度型double、扩展双精度型long double)、字符型char、布尔型bool、空类型void
    • 构造类型:数组类型[]、指针类型*、结构体类型struct、共用体类型union、枚类型enum、类class

    2字节:短整型 4字节:基本整型、长整型、单精度浮点 8字节:双精度浮点(32位计算机)

    常量和变量

    ——基础数据类型
    只要有赋值动作,变量的值一定会被改变/常量一经定义值不会被改变,即使有赋值行为
    常量的定义与说明:
    1.使用预处理命令:#define 常量名 常量值(末尾不需要分号)
    2.使用const来定义常量:const 数据类型 常量名=常量值;(赋值会出错,必须在定义时初始化)

    整型

    ——无符号可以和前三种结合使用,无符号顾名思义就是自然数(有符号的是整数)
    int -32768~32767 即总共2^16个(占2个存储字节,每个字节8位)
    利用头文件climits输出不同数据类型的最大值与最小值,例如cout<<INT_MAX<<endl或cout<<INT_MIN<<endl
    整型、字符型数据的各种输出变量可以进入limits.h头文件查看
    数据的定义和初始化:
    1.类型修饰符 变量名;
    ** 变量名=数值;**
    2.类型修饰符 变量名=数值;
    浮点型数据的范围和有效位可以进入cfloat头文件查询
    科学计数法:a*10^b→ a e b
    双精度的有效位是15位 但是cout通常只输出6个有效位
    执行cout.precision(n);或cout<<setprecision(n)(加入头文件iomanip)后cout输出的有效位数可达n个

    字符型

    ——有符号字符、无符号字符 必须用单引号括起来且只能是一个字符
    普通字符/转义字符(\a响铃、\n换行、"双引号、'单引号、\v竖向跳格、\b退格、\r回车、\反斜杠字符、\t制表符
    整数数据和字符数据是可以相互赋值的

    布尔型

    ——只有两种状态:false/true 也可用0/1表示 所占内存1个字节 在运算中可以与整形相互转化 扮演的角色是判断某个状态是否发生、条件是否成立等

    空类型

    ——又称为无值型 void 但不可以定义void类型的变量,一般用于函数的返回值和其参数类型
    空类型void长度为0,值为空
    用途:1.函数无返回值(如void main();) 2.函数不带参数(如void main(void);) 3.定义通用指针(如void *p)

    结构体与共同体

    不同点:内部成员是否有联系(结构体-需要/共同体-不需要)、变量所占内存长度(结构体-各成员之和(各成员分别占用各自独立的内存)/共同体-最长的成员变量的长度(全部成员共同占用一段内存))
    书写格式:struct/union 结构体/共同体类型名{类型名 成员名;…};(大括号体外必须要有英文分号)
    声明结构体或共同体意味着在有效作用域内,又有了新的数据类型,但是此时没有开辟任何存储空间,只有在定义该类型的变量后,才会有相应的空间。
    初始化方法:1.逐一赋值 2.结构体类型名 变量名={成员1,成员2,成员3,…};
    共同体所有成员都享用1个内存段,在每一瞬间共同体变量的内存只能存放其中一种而不是存放所有,也就是只有一个成员能实时地响应,后面的被赋值成员会影响原有的成员,当被访问内存时只有新成员起作用,因此共同体的初始化不能发生在定义共同体变量时。

    指针变量

    ——用来存放变量地址的变量
    4个特性:
    1.指针变量的值不是一般的地址而是变量的地址
    2.指针变量的值不可以人为任意给定,而必须是严格遵循当地计算机内存的地址值
    3.通过指针变量中的值,再加上特殊运算符可以访问存放于该值的变量中的内容
    4.指针变量中存放的地址值,只能是同它类型一样的变量的地址
    定义:类型修饰符 *变量名;
    初始化:类型修饰符 变量名1=对应类型修饰符的任意值;
    变量名=&变量名1;(&取地址运算符)
    运用指针变量获取地址所指向变量的值并改变它:变量名;
    重要注意事项:
    在定义完指针变量后,它就必须被初始化*

    实现面向对象编程的必要条件——类
    父类→ 子类(共性→ 个性)
    类包含两部分:成员变量和成员函数 类中的成员变量和成员函数都相互有联系(与结构体的区别在于结构体中只有变量,没有函数的实现)
    类就是具有相同属性的具体物质的一种抽象概念,而它是共有属性的定义、实现(变量和函数)的集合

    string类

    string类就是对char的各种操作做了个封装 #include<string>
    string str,str1,str2; str=str1+str2;(str2若为char可组合)
    compare():对两个string变量进行比较(str.compare(str1))
    length():获取string变量长度(str.length())
    find():在元变量中找目标变量是从哪位开始(str.find(str1))
    replace():替换(str,replace(a,b,"c")将第a到第b位换成c)
    string变量的第1个字符是第0位

    数组

    数组的元素 编号/下标从0开始算起 数组元素在内存中连续存放
    数组在定义时,数组大小可写也可不写
    应用读写数据——一维数组
    定义:
    1.数组大小被提前告知:数据类型 数组名[数组大小];
    2.数组大小不被提前告知:数据类型 数组名[]; 初始化形式:数组名[]={变量1,变量2,变量3,…};(这种形式只有在数组元素全部明确的前提下才可以用)
    强制转换:(类型名)值
    应用图像处理——二维数组
    定义:数据类型 数组名[行数][列数];(这里的行数与列数也可不写,但不提倡)
    应用处理字符串——字符型数组
    长度为n的字符串需要n+1个字节的存储空间(必须以\n结尾)
    \0是一个ASCII码值为0的不可显示字符,它标志着字符串的结束
    在字符数组的初始化过程中,如果不足位就会补足'\0'这个字符

    运算符

    赋值运算符:=
    算数运算符:+ - * / % ++ --
    逻辑运算符:&& || !
    关系运算符:< <= > >= == !=

    优先级 运算符 具体功能 结合性
    1 ++ -- 位于变量的自加、自减符 从左到右
    2 () 括号 从左到右
    3 ++ -- 位于变量的自加、自减符 从右到左
    4 从右到左
    5 * / % 乘、除、取余 从左到右
    6 + - 加、减 从左到右
    7 < <= > >= 小于、小于等于、大于、大于等于 从左到右
    8 = != 等于、不等于 从左到右
    9 && 从左到右
    10 从左到右
    11 = 赋值 从右到左

    ++(/--)x+n→先自增(/减)再计算 / x++(/--)+n→先计算再自增(/减)
    在C++中对大于0的数值都是真,对小于等于0的数值都是假

    流程控制语句

    if-else / if-else if...-else
    赋值表达式最后的条件始终为真
    逗号表达式:按照从左往右逐个计算,但最终结果就是最后一个表达式
    switch (<表达式>){
    case <表达式结果整数值1>:<语句1>break;
    case <表达式结果整数值2>:<语句2>break;
    ...
    default:<语句n+1>break;
    }

    其中它的表达式的结果类型必须是整型
    for (<初始表达式>;<条件终止表达式>;<步长>)
    {
    //循环体
    }

    while(<条件表达式>)
    {
    //循环体
    }

    do
    {
    //循环体
    }while(<条件表达式>);
    (勿漏分号)
    while的条件表达式(不可省略)可以始终为真(如while(1)),但是必须要有break;防止变成死循环
    for语句的<初始表达式>、<条件终止表达式>、<步长>均可省略

    函数

    定义:返回类型 函数名 (形式参数表) 函数体
    数据类型1 变量名1,数据类型2 变量名2,…
    return <返回值表达式>;
    对于无返回值void型,执行返回值的语句可不写或只写return;
    函数调用
    递归调用嵌套调用的一种特例

    第三章 C++面向对象编程基础

    面向对象编程:面向的是具有同一种属性的事物
    面向对象编程的中心思想就是将看似复杂的事物提取出相似的特征,然后再处理不同的个性特征
    程序运行期的基本实体——对象
    实现面向对象编程的必要条件——类
    类拥有自己的成员变量成员函数,它是一些事物相同特性的体现者
    类声明一般形式:
    class 类名
    {
    //定义体
    }

    类对象定义一般形式:类名 对象名;
    类是一个抽象的虚拟的物质,而对象是实实在在存在的一个物体
    实现程序的模块化——封装
    函数的封装→函数体+参数接口
    的封装
    函数具体实现过程是看不到的,读者只需懂得外部接口如何使用
    实现系统的可重用及可扩展性——继承
    父类/基类→子类/派生类
    同一消息为不同对象接受时产生完全不同的行为——多态
    virtual(虚)和重写
    对象之间沟通的途径——消息传递
    对不同类成员变量的访问权限:

    类型 关键字 访问权限描述
    公有成员 public 在其生命周期内,在任何地方都可以被访问
    私有成员 private 只能被该类的其他成员访问,外部函数甚至它的子类也不可以访问
    保护成员 protected 与私有成员一样,但是它可以被其子类访问

    构造函数

    创建规则:
    1.名字必须跟本类的类名一模一样
    2.构造函数不可以有任何类型 的返回值,即使是void也不行
    3.一个类的构造函数可以被重载,即可以有多个构造函数

    • 无参构造函数(即默认)
      在类内被声明:类名 ();
      定义体:类名::类名 () { }
    • 带参构造函数
      被声明:类名 (<参数列表>);
      定义体:类名::类名(<参数列表>){ }

    默认构造函数只会执行创建对象的动作,不会给对象执行任何初始化工作
    当对象一旦被创建,系统就会自动给对象分配内存空间并调用其构造函数
    当一个类的对象是另一个类的成员变量时,先调用类内成员变量(另一个类对象)的构造函数,再调用自身的构造函数。
    默认构造函数 / 默认参数的构造函数:如果对象没有初始值就用默认值
    这两种构造函数不能同时存在

    析构函数

    创建规则:
    1.同构造函数一样无返回类型,也无参数
    2.函数是在构造函数名前加一个~逻辑非运算符
    3.不可以被重载,可以在析构函数体重自行写释放资源的语句也可不写
    类内被声明:~类名 ();
    定义体:类名::~类名 () { }
    析构函数-处理回收资源的任务
    初始化对象时,先调用被调用类的构造函数,再调用主类的构造函数,而释放资源时先释放主类的,再释放被调用类的
    重载构造函数:究竟调用哪个构造函数得看创建对象时的格式
    复制构造函数:对于相同类定义的不同对象,可以用一个对象去构造另一个对象。此时被赋值的另一个对象调用的构造函数就称为复制构造函数

    <指针变量> = new int[n] //声明n个字节的内存
    delete [ ] <指针变量> //释放内存
    

    new/delete和malloc/free的区别
    1.new/delete是C++的操作符,对对象操作,是保留字,不需要头文件支持 / malloc/free是C中的函数,对内存空间操作,需要头文件库函数支持
    2.new→分配内存+调用对象的构造函数 / delete→调用对象的析构函数+释放内存;malloc/free→分配和释放内存。
    3.new:建立一个对象/malloc:分配一块内存;new建立的对象可以用成员函数访问,不要直接访问它的地址空间 / malloc分配的是一块内存区域,用指针访问,可以在里面移动指针;new出来的指针是带有类型信息的 / malloc返回的是void指针。
    4.使用free释放时需要判断指针是否为NULL,delete不用

    虚函数

    一般在基类中进行

    相关文章

      网友评论

          本文标题:《Visual C++入门很简单》

          本文链接:https://www.haomeiwen.com/subject/xychuttx.html