C++

目  录

1 开始学习C++ 4

1.1 C++的头文件 4

1.2 命名空间 4

1.3 更严格的类型转化 4

1.4 new和delete 4

1.5 内联函数 4

1.6 引用 5

1.7 函数的重载 5

2 类和对象 6

2.1 C++类成员 的保护 6

2.2 C++类的本质 6

2.3 类的作用域 6

2.4 类的构造和析构函数 6

2.5 构造函数的初始化成员列表 6

2.5.1 原则: 7

2.6 拷贝构造函数 7

2.6.1 浅拷贝 7

2.6.2 深拷贝 7

2.6.3 原则: 8

2.7 常量类成员,常量对象。 8

2.8 explicit 8

2.9 this指针 8

2.10 类的static成员变量 8

3 C++封装与移植训练 9

3.1 UDP协议 9

3.2 C和C++混合编程 11

3.3 makefile 12

3.3.1 gcc编译过程 12

3.3.2 gcc参数 12

1 开始学习C++

1.1 C++的头文件

传统的C头文件。

C++头文件

hpp文件

1.2 命名空间

C++引入了新的概念,命名空间可以有效避免大型项目中的各种名称冲突

class关键字

class是C++的核心,是面向对象编程的核心内容

1.3 更严格的类型转化

在C++,不同类型的指针是不能直接赋值的,必须强转

1.4 new和delete

new和delete是C++内建的操作符,不需要有任何头文件,new分配的内存必须用delete释放,不要用free。

new创建数组的方法new[];

1.5 内联函数

inline关键字的意思是,内联函数不作为函数调用,而是直接把内联函数的代码嵌入到调用的语句中

内联函数适合函数代码很少,并且频繁的大量调用。

1.6 引用

引用就是一个变量的别名,而不是地址

函数的缺省参数

C++允许函数在定义的时候,提供缺省参数,如果调用函数的时候没有提供形参,那么形参的值就是缺省值

引用做为函数的参数,没有出栈,入栈操作,所以效率更高

如果要使引用参数的值不能在函数内部被修改,那么就定义为常量引用 const &

1.7 函数的重载

函数的名称是一样的,但参数不同可以重载

函数参数相同,但返回值不同,不可以重载

2 类和对象

2.1 C++类成员的保护

如果类函数返回的是成员变量的指针,为了避免在类外部成员变量被修改,所以函数就要返回常量指针

如果一个类成员变量和一个全局变量重名,那么在类成员函数当中默认访问的是类的成员变量.

在类的内部访问全局标识,关键字::

2.2 C++类的本质

类其实就是结构的数据成员加可执行代码,统一提供封装,继承,多态。

在类内部,没有权限限定符,默认是private

在结构内部,没有权限限定符,默认是public

2.3 类的作用域

类成成员变量作用域局限于类内部,类的外部是不可见。

2.4 类的构造和析构函数

构造函数名称和类的名称一致,而且没有返回值

一个类实例化为一个对象的时候,自动调用。

一个对象在销毁的时候会自动调用析构函数。

2.5 构造函数的初始化成员列表

初始化成员列表只能在构造函数使用

const成员必须用初始化成员列表赋值

引用数据成员必须用初始化成员列表赋值

2.5.1 原则:

由于析构函数只有一个,所以在不同的构造函数里面给函数的成员指针分配内存的时候,一定要统一new或者new[]

2.6 拷贝构造函数

2.6.1 浅拷贝

两个对象之间成员变量简单的赋值。

2.6.2 深拷贝

不同的对象指针成员指向不同的内存地址,拷贝构造的时候不是简单的指针赋值,而是将内存拷贝过来。

2.6.3 原则:

如果类成员有指针,那么需要自己实现拷贝构造函数,不然存在浅拷贝的风险。

2.7 常量类成员,常量对象。

类成员后面跟关键字const意思是告诉编译器,这个函数内部不会对类成员变量做任何修改

函数的参数如果是一个类,那么就用类的引用。如果不想参数被调用函数内部修改,那么就采用const &

2.8 explicit

告诉C++编译器,要明确的调用这个构造函数,而不要自作聪明的认为=操作符是要调用构造的。

2.9 this指针

this就是指向自己实例的指针

2.10 类的static成员变量

static变量是放到静态内存区的,程序加载就存在,一直到程序退出才清理。

类的static成员和类的对象没有直接关系,类的静态成员是放到静态内存区的,程序开始执行就存在,一直到程序结束才清理。

类的静态成员变量不论类的实例有多少,但成员变量只有一份

3 C++封装与移植训练

3.1 UDP协议

TCP/IP

UDP协议是基于IP

socket把网络协议用C语言封装成一个个函数,放到dll,供其他语言调用,

阻塞,一个函数在没有返回之前,程序被挂起.

recvfrom就是一个阻塞的函数

网络是字节流,发送是以字节为单位的,如果大于一个字节的数据类型通过网络发送的时候必须调用htons或者htonl函数将数据转化为正确的网络字节流才能发送

windows底层的socket,Ws2_32.lib

127.0.0.1,这个IP地址就代表自己。

0,代表自己

255广播

192.168.6.1 192.168.6.254

3.2 C和C++混合编程

对于C语言来讲,编译完成之后函数的名称不会改变,对于C++来讲函数的名称发生变化

如果是C代码中的函数,在C++中使用一定要用extern “C”关键字来说明

对于操作系统来讲,一定要避免两个程序同时绑定到一个端口。

3.3 makefile

3.3.1 gcc编译过程

3.3.2 gcc参数

-o 指定输出文件名

-c 只编译,不链接

-E预编译

make是根据.cpp和.o文件的最后修改日期判断cpp文件是否需要编译。如果.o文件不存在,make会失去判断条件,那么一定会编译cpp文件。

在unix下so文件一定要以lib开头,以so结尾

gcc参数-iPIC生成和位置无关的代码,

[C++] * Basic and Class的更多相关文章

  1. Atitit HTTP 认证机制基本验证 (Basic Authentication) 和摘要验证 (Digest Authentication)attilax总结

    Atitit HTTP认证机制基本验证 (Basic Authentication) 和摘要验证 (Digest Authentication)attilax总结 1.1. 最广泛使用的是基本验证 ( ...

  2. Basic Tutorials of Redis(9) -First Edition RedisHelper

    After learning the basic opreation of Redis,we should take some time to summarize the usage. And I w ...

  3. Basic Tutorials of Redis(8) -Transaction

    Data play an important part in our project,how can we ensure correctness of the data and prevent the ...

  4. Basic Tutorials of Redis(7) -Publish and Subscribe

    This post is mainly about the publishment and subscription in Redis.I think you may subscribe some o ...

  5. Basic Tutorials of Redis(6) - List

    Redis's List is different from C#'s List,but similar with C#'s LinkedList.Sometimes I confuse with t ...

  6. Basic Tutorials of Redis(5) - Sorted Set

    The last post is mainly about the unsorted set,in this post I will show you the sorted set playing a ...

  7. Basic Tutorials of Redis(4) -Set

    This post will introduce you to some usages of Set in Redis.The Set is a unordered set,it means that ...

  8. Basic Tutorials of Redis(3) -Hash

    When you first saw the name of Hash,what do you think?HashSet,HashTable or other data structs of C#? ...

  9. Basic Tutorials of Redis(2) - String

    This post is mainly about how to use the commands to handle the Strings of Redis.And I will show you ...

  10. Basic Tutorials of Redis(1) - Install And Configure Redis

    Nowaday, Redis became more and more popular , many projects use it in the cache module and the store ...

随机推荐

  1. IMAP简单研究

    IMAP的相关详细介绍: http://www.imapwiki.org/ClientImplementationhttp://tools.ietf.org/html/rfc3501 1.连接服务器 ...

  2. FPGA学习的一点总结

    做FPGA主要是要有电路的思想,作为初学者,往往对器件可能不是熟悉,那么应该要对数字电路的知识熟悉. FPGA中是由触发器和查找表以及互联线等基本结构组成的,其实在逻辑代码里面能够看到的就是与非门以及 ...

  3. GOF23设计模式之外观模式(facade)

    一.外观模式概述 外观模式也称为门面模式. 核心:为了系统提供统一的入口,封装子系统的复杂性,便于客户端调用. 二.外观模式场景导入与示例代码 场景:要想自己去注册一个公司,首先去工商局检测命名是否合 ...

  4. li布局问题

    问题示意,好多网站一般都有这种布局,如 问题主要原因,第一个li没有margin-left 其余有(这里只考虑一排的情况) 第一种解决方式: <!DOCTYPE html> <htm ...

  5. USB驱动程序之USB设备驱动程序2鼠标用作键盘学习笔记

    1.usbmouse.c (1)probe函数 在这个probe函数后判断是不是一个鼠标,先得到usb_host_interface结构体,除了端点0外,端点个数如果不是1,返回错误,表示不是自己能支 ...

  6. node.js 获取客户端信息

    结果:

  7. 记一次爬需要登录之后才能爬取数据的demo

    一:工程概况 注意: 二:涉及到的类 package com.bigdata.crawler; import java.io.IOException; import java.util.List; i ...

  8. oracle监听动态注册与静态注册

    client端如果想要连接到远程的数据库服务器,首先数据库服务器必须启动监听器 oracle监听器的配置在$ORACLE_HOME/network/admin/listener.ora,打开这个文件, ...

  9. java 堆、栈、常量池等

    寄存器:我们在程序中无法控制 栈:存放基本类型的数据和对象的引用,但对象本身不存放在栈中,而是存放在堆中 堆:存放用new产生的数据 静态域:存放在对象中用static定义的静态成员 常量池:存放常量 ...

  10. [Z] 关于Python Tornado的一些资料

    一个简单的样例: http://osedu.net/article/python/2014-03-18/501.html ioloop的官方doc: http://www.tornadoweb.org ...