c++基本知识梳理(1)

1、C++和标准C++:包含完整系统类库是标准C++在97年完善,
90年代初,带有语言标准,不含有标准类库,而且各种功能在不同种逐渐推出。
VC++和g++以及其他的c++编译器必须符合语言标准。
无论VC++升级到什么版本,语言标准不一定升级。
2、标准类库主要包含
string/
list
Vector
map
只要是标准C++的编译器,无论是VC++还是g++以及c++ builder(BCB)等都要支持以上类库。
在linux g++上 MFC的类库不支持,MFC类库只限于在VC++种使用。
3、C++语言比C语言在一些代码书写上更加方便和简介,例如:
a)C++函数内变量的定义可以在语句之后,而C语言则变量必须定义在函数内所有语句的上方;
b)C语言定义结构体对象(指针)时必须带关键字,而C++不用带关键字.


1、bool型变量:1个字节变量(和char一样大小)
缺省赋值为true(1)或者false(0)


2、引用型变量:让新申请的变量挂在原有同类型变量的内存地址上。
a)引用型变量必须初始化,引用变量必须挂在一个现有的同类型变量上;
b)引用变量的地址与来源变量的地址一定是在同一个内存地址上(相同);
c)引用变量与来源变量任何一个数值变化则另一个一定变;
d)引用型变量做参数,经常是用来代替来源变量赋值或者取值(替身);
引用型变量的原理实际上就是指针变量,被障眼法看成是两个替身变量;
引用的优点是书写更加流畅,使代码的逻辑更加清晰!!


3、命名空间:
a)当工程代码量庞大时,由大量程序员编写的代码出现了重名函数,重名全局变量
b)使用using namespace std;语句在每处调用空间内的函数不用加域名控制
例如:std::cout << aa;
c)定义域(::):以后会在类成员函数中常用。
4、C++输入输出:
推荐使用#include <iostream> 
using namespace std;
不推荐使用#include <iostream.h>
cout 和cin代替printf和scanf功能更强,自动识别输入输出的类型。
(不需要指定%d和%s等等)


5、C++支持重载函数,C语言不可以有名字相同的函数;
重载函数:函数名字相同但是参数列表不同(类型和个数不完全相同)
递归函数:C语言和C++都支持。


6、申请堆空间:
new和delete代替malloc和free,是书写更加流畅,尤其申请堆内数组更直观。
例如:
// STest *p = (STest*)malloc(sizeof(STest));
STest *p = new STest;
//free(p);
delete p;
// int * p1 = (int*)malloc(sizeof(int)*5);
int *p1 = new int[5];
delete []p1;//不推荐删除数组时,delete p1;


注意:new 的错误写法:int* p1 = new int(5);


7、C++由结构体struct升级为类class
结构体或者类内不但支持成员变量,还支持成员函数,是一个更加严重的障眼法,
任何一个类的成员函数内部都隐藏形式参数一个变量叫this




8、内联扩展是用来消除函数调用时的时间和空间开销。它通常用于频繁执行的函数。 
一个小内存空间的函数非常受益。如果程序员没有指定内联函数,编译器可以决定哪些函数内联 。



内连函数inline
代替:C语言的宏定义函数,实际也是C++的障眼法之一。

编译时仍然按宏定义函数一样处理的。


成员函数的原理:
1、当一些函数与某一个结构体(类)的成员变量运算关系非常紧密,
C++把这样的一些函数划分到这个类的内部,叫做成员函数。
2、成员函数内部必须有个本结构体(类)的指针变量(this),
这个指针变量指向哪个本结构体(类)的对象就这个函数就将操作那个结构体(类)内的成员变量。
3、最终达到的效果就是一个类不但有成员变量(属性)而且还有一些相关的行为(功能)。
这个效果就是面向对象的开发。


2、构造函数(constructor):
构造函数就是代替了C语言的大括号对本类对象的成员数据进行初始化的函数。
a)构造函数是类的一种特殊成员函数,一般情况下,构造函数是专门用于初始化对成员变量的
,所以最好不要在构造函数中进行与对象的初始化无关的操作。
b)构造函数的函数名一定与类的名称完全相同,而且没有返回值
(不是说返回值是void或者int,而是说不允许指定返回值)。
c)构造函数的返回值如果指定了任何类型都是错误,构造函数的功能是代替C语言对结构体对象初始化的大括号。
d)C语言对结构体成员初始化方式是使用大括号,如果该类(结构体)有构造函数就禁止使用大括号初始化成员数据。
3、构造函数调用,
a)是在定义对象时指定参数或者不指定参数,都系统自动调用对应的构造函数。手工使用对象调用构造函数出错。
b)构造函数分为无参数,有参数和拷贝构造函数。定义了哪形式的构造函数,就意味着类有哪种对象定义方式。
c)使用=符号来调用构造函数,调用单参数的构造函数而且单参数类型和=符号右边的类型相同。
d)一般情况下=符号右边的类型没有适合单参数构造函数就不能使用=符号构造
e)只有一种类型不需要适合=符号右边构造函数。系统内部有缺省的拷贝构造函数,内部实现的是整体赋值。
(还有一个缺省是operator=)


4、拷贝构造函数:拷贝构造函数是特殊的构造,主要是用一个已有对象整体初始化新的对象。
a)标准拷贝构造函数:类名(const 类名& 对象)
b)非标准拷贝构造函数:类名(类名& 对象)




5、析构函数(destructors)
a)析构函数可以手工调用但不推荐手工调用,主要是对象的生命期结束时,会自动调用析构函数。
b)析构函数名是在类名前加"~",析构函数同样不能返回任何值,也必须没有函数参数,并且不能被重载.
c)所以一个类可以有多个构造函数,却只能有一析构函数。
d)一般说来,每当创建一个对象时就调用对象的构造函数;每当撤消一个对象就调用该对象的析构函数。



注意:new 的错误写法:int p1 = new int(5);


内联扩展是用来消除函数调用时的时间开销。它通常用于频繁执行的函数。 一个小内存空间的函数非常受益。
如果没有内联函数,编译器可以决定哪些函数内联 。 


面向对象的三个基本特征是:封装、继承、多态。
1、封装(成员函数的原理):是面向对象的特征之一,是类和对象概念的主要特性。 
    封装就是把客观事物封装成抽象的类,并且类可以把自己的数据和方法只让可信的类或者对象操作,对不可信的进行信息隐藏。 
2、继承(派生类的原理):面向对象编程 (OOP) 语言的一个主要功能就是“继承”。
    继承是指现有类的所有功能,并在无需重新编写原来的类的情况下对这些功能进行扩展。 
通过继承创建的新类称为“子类”或“派生类”。 被继承的类称为“基类”、“父类”或“超类”。 继承的过程,就是从一般到特殊的过程。
例如:
文科学生信息(历史,政治,地理等成绩)是还包含通用学生信息。
理科学生信息(物理、化学、生物等成绩)是还包含通用学生信息,
因此这两个类都可以继承 通用Student 类(姓名、性别和年龄等)。
3、多态(虚函数的原理):
封装可以隐藏实现细节,使得代码模块化;继承可以扩展已存在的代码模块(类);它们的目的都是为了——代码重用。而多态则是为了实现另一个目的——接口重用!例如:一个排序函数可以按多种规则进行排序。
又如:每个图形类都有绘图的接口,调用CLine类的绘图函数画出的是一条线,调用CEllipse类画出的是一个椭圆等等。


(整理自吕鑫老师c++教程)


  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
经导师精心指导并认可、获 98 分的毕业设计项目!【项目资源】:微信小程序。【项目说明】:聚焦计算机相关专业毕设及实战操练,可作课程设计与期末大作业,含全部源码,能直用于毕设,经严格调试,运行有保障!【项目服务】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。 经导师精心指导并认可、获 98 分的毕业设计项目!【项目资源】:微信小程序。【项目说明】:聚焦计算机相关专业毕设及实战操练,可作课程设计与期末大作业,含全部源码,能直用于毕设,经严格调试,运行有保障!【项目服务】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。 经导师精心指导并认可、获 98 分的毕业设计项目!【项目资源】:微信小程序。【项目说明】:聚焦计算机相关专业毕设及实战操练,可作课程设计与期末大作业,含全部源码,能直用于毕设,经严格调试,运行有保障!【项目服务】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。 经导师精心指导并认可、获 98 分的毕业设计项目!【项目资源】:微信小程序。【项目说明】:聚焦计算机相关专业毕设及实战操练,可作课程设计与期末大作业,含全部源码,能直用于毕设,经严格调试,运行有保障!【项目服务】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值