学习Linux编程前的准备
如果您是非计算机相关专业零基础兄弟,在学习Linux编程基础之前,建议先学习计算机基础、Linux操作系统基础知识和计算机网络基础知识。
计算机基础知识包括了很多常识性的内容,学了不一定有用,但是如果对一些基本常识不了解,可能会闹笑话。
我们学习的目标是成为C/C++程序员,不是Linux系统管理员,也不是网络管理员。作为一个程序员,只需要了解Linux操作系统和计算机网络的基础知识就可以了,不需要深入研究它们的原理。大家不要去买这两方面书籍,建议大家去买一个云服务器,腾讯、华为、阿里的都可以,一年不超过100元,云服务器对学习非常有帮助,远远超过任何书籍。
最好的学习方法是到网上找免费的视频教程,例如B站、腾讯课堂、CSDN学院等,这些很基础的知识网上非常多。
总的来说,以学习概念和扩充知识面为主,不要深入理论,不要学习算法,应用为王。
一、计算机基础知识的学习
====================
1)计算机历史。
2)计算机的应用领域。
3)二进制、十进制、十六进制的基本概念。
4)计算机总线、外部设备。
5)计算机软件、操作系统基本概念。
6)学习时间不超过20小时。
7 ...
C++类的多态
多态按字面的意思就是多种形态。当类之间存在层次结构,并且类之间是通过继承关联时,就可能会用到多态。
C++多态就是当调用成员函数时,会根据调用函数的对象的类型来执行不同的函数。
一、静态多态
我们以前说过的函数重载就是一个简单的静态多态,静态多态是编译器在编译期间完成的,编译器会根据实参类型来选择调用合适的函数,如果有合适的函数可以调用就调,没有的话就会发出警告或者报错。
示例(book236.cpp)
1234567891011121314151617181920212223242526272829303132333435363738394041424344454647/* * 程序名:book236.cpp,此程序用于演示C++类的静态多态。 * 作者:C语言技术网(www.freecplus.net) 日期:20190525*/#include <stdio.h>#include <string.h>class CGirl // 定义超女类{public: char m_name[50]; // 姓名 int m_age; ...
C++类的继承与派生
一、继承
继承是面向对象程序设计中最重要的一个概念。继承允许我们根据一个类来定义另一个类,达到了代码功能重用效果。
当创建一个类时,如果待创建的类与另一个类存在某些共同特征,程序员不需要全部重新编写成员变量和成员函数,只需指定继承另一个类即可,被继承的类称为基类或父类,新建的类称为派生类或子类。
二、基类和派生类
定义一个派生类,需要指定它的基类,语法如下:
1234class <派生类名>:<继承方式> <基类名>{// 派生类类体};
继承方式是 public、protected 或 private 其中的一个,基类是之前定义过的某个类的名称。如果未指定继承方式,则默认为private。
选秀之后,被选中的超女成了宫女和王妃,宫女和王妃从超女那里继承了姓名、年龄、身高、身材、颜值等特征,还会具备一些新的特征,如果是王妃,有称号、居住的宫殿、奉䘵、为她服务的太监和宫女数量等。还有,王妃的年龄、身材和颜值都不能随便讨论的,会掉脑袋的。
示例(book235.cpp)
123456789101112131415161718192 ...
C++动态内存管理
一、C++动态内存
在C程序中,内存需求都是在编写程序的时候声明变量来确定,但是程序在运行过程中需要动态分配内存的情况,C语言将运算符new和delete合成在一起。
1、特点
中通过new关键字向系统内存申请。
C++中的动态内存分配是基于数据类型进行的。
delete关键字用于内存释放。
2、语法
123datatype *pointer = new datatype;// 其它代码delete pointer;
datatype可以是C语言的基本数据类型,也可以是结构体,还可以是类。
pointer是一个指针,指向new返回的地址。
例如:
123int *pi= new int; // 动态分配一个整数大小的内存(*pi)=10;delete pi; // 释放pi指向的内存
或
12345678910CGirl *pgirl=new CGirl; // 动态分配CGirl类 strcpy(pgirl->name,"西施"); pgirl->age=22; pgirl.height=168; strcpy(pgirl->sc ...
C++的vector容器
我们在声明数组的时候,采用的是datatype array[len]的形式,数组在分配之后,不能调整大小,删除和插入数据时操作十分的繁琐,虽然可以采用链表,但是链表的操作更麻烦,我们希望有更简单的方法。
与string类一样, 向量vector 同属于STL(Standard Template Library,标准模板库)中的定义的类, vector是一个封装了动态数组的顺序容器(Sequence Container),它能够存放各种类型的数据和对象。
可以简单的认为vector容器是一个能够存放任意类型的动态数组,与数组相比,vector容器的优点在于它能够根据需要自动调整的大小,随时放入更多的元素。此外, vector也提供了成员函数对自身进行操作。
一、容器的定义
首先,如果要在程序中使用vector容器,必须包含头文件 <vector>。如下:
1#include <vector>
vector类是一个模板类,位于std命名空间内,为方便使用还需要增加:
1using namespace std;
声明一个容器很简单:
12345vector<i ...
C++的string类
在C语言中,用0结束的字符数组表示字符串,有些不方便:1)数组定义后大小不能改变;2)存入的内容只能比数组小,不能大,如果不小心存多了,会引起内存的溢出,这些问题让程序员有些郁闷。
C++的string属于STL(Standard Template Library,标准模板库)中的定义的类,它会随存放字符的长度自动伸缩,程序员不必担心内存溢出的问题,string类还和C语言的字符串之间还可以很方便的转换。
一、string的声明
首先,为了在程序中使用string类,必须包含头文件 <string>。如下:
1#include <string>
注意这里不是string.h,string.h是C语言字符串头文件。
string是一个模板类,位于std命名空间内,为方便使用还需要在程序中增加:
12using namespace std; // 指定缺省的使名空间。string str; // 创建string对象。
如果不指定命名空间,也就是说没有using namespace std,创建string对象的方法如下:
1std::string ...
C++运算符重载
一、运算符重载的概念
在C语言中,运算符只能用于基本数据类型,例如,可以用==判断两个整数是否相等,但不能用于判断字符串是否相等,不能用于判断结构体,也不能用于判断类。
在C++中,运算符的重载就是把运算符的符号赋予新的含义,如果类重载了 == 运算符,那么就可以用== 判断两个类是否相等。
二、运算符重载的实现
operator是C++的一个关键字,它和运算符一起使用,表示一个运算符重载函数,在理解时可将operator和运算符(如operator==)视为类的一个成员函数名。
示例(book214.cpp)
12345678910111213141516171819202122232425262728293031323334/* * 程序名:book214.cpp,此程序用于演示C++运算符重载。 * 作者:C语言技术网(www.freecplus.net) 日期:20190525*/#include <stdio.h> #include <string.h> class CGirl // 定义类{public: char m_n ...
C++引用
对于习惯使用C进行开发的程序员来说,在看到C中出现的&符号,可能会犯迷糊,因为在C语言中这个符号表示了取地址符,但是在C中,它除了取地址,还有其它的用途,叫做引用(reference),引用是C++的新特性。
一、引用的概念
引用就是变量的别名,对引用的操作与对变量直接操作完全一样。
引用的声明方法:
1类型标识符 &引用名=目标变量名;
例如:
123int a; int &ra=a; // 定义引用ra,它是变量a的引用,即别名。ra=1; 等价于 a=1;
说明:
1)&在此不是求地址运算,而是起标识作用。
2)类型标识符是指目标变量的类型。
3)声明引用时,必须同时对其进行初始化,否则编译器会报错,所以,不能再把引用名作为其他变量名的别名。
4)引用声明后,相当于目标变量名有两个名称。
5)声明一个引用,不是新定义了一个新的变量,它只表示该引用名是目标变量名的一个别名,它本身不是一种数据类型,因此引用本身不占存储单元,系统也不给引用分配存储单元。
6)不能建立数组的引用。因为数组是一个由若干个元素所组成的集合,所以无法对数据建立引用。
7 ...
C++类的详解
超女选秀的例子我们玩了很久,为了学习的需要,暂时离开美眉们,我将采用实际项目开发的例子来讲解类的更多知识。
在C语言基础知识中已学习过文件操作,在实际开发中,为了提高效率,我会把文件操作封装成一个类,类的声明如下:
123456789101112131415161718192021222324252627// 文件操作类声明class CFile{private: FILE *m_fp; // 文件指针 bool m_bEnBuffer; // 是否启用缓冲区,true-启用;false-不启用public: CFile(); // 类的构造函数 CFile(bool bEnBuffer); // 类的构造函数 ~CFile(); // 类的析构函数 void EnBuffer(bool bEnBuffer=true); // 启、禁用缓冲区 // 打开文件,参数与fopen相同,打开成功true,失败返回false bool Open(const char *filename,const char *openm ...
C++类和对象
一、C++结构体的新特征
C语言的结构体不允许有函数,定义结构体变量的方法是:
1struct 结构体名 结构体变量名;
在C++中,结构体的成员可以有函数,定义结构体变量可以用:
1结构体名 结构体变量名;
struct关键字可以不书写。
示例(book202.c)
12345678910111213141516171819202122232425262728293031323334/* * 程序名:book202.cpp,此程序用于演示C++结构体的新特征。 * 作者:C语言技术网(www.freecplus.net) 日期:20190525*/#include <stdio.h>#include <string.h>struct st_girl{ char name[50]; // 姓名 int age; // 年龄 int height; // 身高,单位:厘米cm char sc[30]; // 身材,火辣;普通;飞机场。 char yz[30]; // 颜值,漂亮 ...