[C++] * Basic and Class
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的更多相关文章
- Atitit HTTP 认证机制基本验证 (Basic Authentication) 和摘要验证 (Digest Authentication)attilax总结
Atitit HTTP认证机制基本验证 (Basic Authentication) 和摘要验证 (Digest Authentication)attilax总结 1.1. 最广泛使用的是基本验证 ( ...
- 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 ...
- 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 ...
- 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 ...
- 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 ...
- 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 ...
- 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 ...
- 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#? ...
- 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 ...
- 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 ...
随机推荐
- 快速创建yii2 RESTful api的小记
1.复制backend的应用到同级目录,改名叫api 2.然后就是配置项修改,common和api目录下的 common下: bootstrap.php最后添加一行配置 api/config/main ...
- mysql存储引擎之innodb学习
innodb引擎特点1.支持事务:支持4个事务隔离级别,支持多版本读. 2.行级锁定(更新时一般是锁定当前行):通过索引实现,全表扫描仍然会是表锁,注意间隙 锁的影响 3.读写阻塞与事务隔离级别有关 ...
- mysql索引相关理解
1.索引是高效获取数据的数据结构, 2.唯一索引,索引值不重复unique create unique index 索引名 on 表名(字段) alter table 表名 add unique in ...
- 在centOS5.9安装asterisk
最近一直在研究asterisk这个服务器,Asterisk 是一个开放源代码的软件VoIP PBX系统,它是一个运行在Linux环境下的纯软件实施方案.Asterisk是一种功能非常齐全的应用程序,提 ...
- 【POJ】2329 Nearest number - 2(搜索)
题目 传送门:QWQ 分析 在dp分类里做的,然而并不会$ O(n^3) $ 的$ dp $,怒写一发搜索. 看起来是$ O(n^4) $,但仔细分析了一下好像还挺靠谱的? poj挂了,没在poj交, ...
- 浅谈PHP面向对象编程(三、构造方法和析构方法)
3.0 构造方法和析构方法 从我之前的博客可以发现,实例化一个类的对象后,如果要为这个对象的属性赋值,需要直接访问该对象的属性.如果想要在实例化对象的同时就为这个对象的属性进行赋值,则可以通过构造方法 ...
- CentOS 7 创建桌面快捷方式
一,在桌面新建一个文件 文件名随意,但必须带有.desktop的后缀名, 以Eclipse为例 vi /home/lenmom/Desktop/eclipse.desktop 其中: lenmom 是 ...
- 敌兵布阵hdu1166
/* 敌兵布阵 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) Total Submi ...
- python‘s first day for me
计算机的基础 1,计算机由硬件及软件组成. 其中硬件主要包括了cpu,内存以及硬盘.软件则由操作系统以及一系列软件. 操作系统则可以操控硬件,使硬件完成一些需要的操作. python的历史 1989年 ...
- 用Theano学习Deep Learning(三):卷积神经网络
写在前面的废话: 出了托福成绩啦,本人战战兢兢考了个97!成绩好的出乎意料!喜大普奔!撒花庆祝! 傻…………寒假还要怒学一个月刷100庆祝个毛线………… 正题: 题目是CNN,但是CNN的具体原理和之 ...