1. 简介
c++是一种静态编译编程语言,以其广泛应用于软件基础架构而闻名,又以其难学而声名狼藉。 1979年由斯特劳斯特鲁普在贝尔实验室创建,受到Simula面向对象的启发,又有需要高性能的C,因此有了带类的C。
C++的设计是C的超集,这意味着任何C程序在C++下都是合法的。所以也开创了‘零成本抽象’,像面向对象模式,多态性,封装和继承。
当今它广泛应用于各种内存需求受限系统,如3A级别游戏的UE(unreal engine),编辑视频的AE(adobe after effects),数据库中的MySQL和MongoDB,嵌入式系统中如面包机上的显示器等。C++也用于许多底层基础设施使用,像语言编译器和虚拟机。
C++如此流行,是因为它既可以像C一样管理底层内存和硬件,同时也具备有高阶抽象化能力,如类和智能指针。用C++很难砸到自己的脚,但一旦炸了,整条腿灰飞烟灭(一个视频讲解中的一句话,有点意思)。
2. 代码演示
使用C++之前,开始先要安装C++编译器,像GCC或Clang(LLVM CLANG)。接着创建后缀名为.cpp的源程序文件,开头#include<iostream>,表示来自标准库,用于处理输入和输出,在main函数(程序入口)中写你的逻辑代码,要打印Hello World,直接std::cout后跟 << 以及字符串。
// 标准库 用来处理输入和输出
#include <iostream>
// 主函数入口
int main() {
// 打印字符串
std::cout << "Hello World";
// 返回int值结果
return 0;
}
也可以去掉std,通过在文件顶部加namespace命名空间的方式,声明出来,后续打印就可以省略std,
#include <iostream>
// 使用命名空间
using namespace std;
int main() {
cout << "Hello World";
cout << "Hello C/C++";
return 0;
}
现在如果我们想创建字符串变量,可以输入[]
#include <iostream>
using namespace std;
int main(){
cout << "Hello World";
// 字符串变量,用字符数组的方式
char hello[] = "Hello C/C++";
return 0;
}
这样还是太麻烦,于是我们可以引入include <string>string标准库。这时我们就可以使用string类型替代char[]字符数组。为什么可以这样做,真正改变游戏规则的是C++支持用类来进行面向对象(OOP)编程。
#include <iostream>
#include <string>
using namespace std;
int main(){
cout << "Hello World";
// 字符串变量,用字符数组的方式
string hello = "Hello C++";
return 0;
}
class是对象的蓝图,类中可以定义属性和方法,默认都是私有的
class Human {
// 私有的
float dna;
}
我们可以使用public声明为公有,这样实例化对象后可以调用到
#include <iostream>
using namesapce std;
class Human {
float dna;
// 声明为公有的
public:
string face;
void walk() {
cout << "Walking...";
}
}
公有方法也可以在类外定义方法,定义要用到::
#include <iostream>
using namespace std;
class Human {
}
void Human::walk() {
cout << "Walking...";
}
方法可以使用不同参数定义多次,称为重载,多态性的一种形式,
#include <iostream>
using namespace std;
class Human {
public:
void walk(int speed) {
// ...
}
void walk(float speed) {
// ...
}
}
此外我们可以定义构造函数和析构函数,来创建和销毁对象。
#include <iostream>
class Human {
public:
Human() {
// constructor 构造函数,用于创建对象
}
~Human() {
// destructor 析构函数,用于销毁对象
}
}
同时类也支持继承,让开发者在程序中更好的共享逻辑
#include <iostream>
using namespace std;
class Human {
public:
void walk() {
// ...
}
}
// inheritance 继承
class SuperHero: public Human {
public:
string weapon = "Cape";
void fly() {
cout << "Flying..."
}
};
通过键入类名来实例化对象,后面跟对象的名字(命名), 以及构造函数任意参数
int main() {
Human jeff;
return 0;
}
说到内存,可以通过指针和引用手动管理一切
#include <iostream>
using namespace std;
class Human {
float dna;
public:
string face;
void walk() {
cout << "Walking...";
}
};
int main() {
Human jeff;
//*Pointer 指针,手动管理
Human* myPointer = new Human;
// deallocate memory 释放内存
delete myPointer;
return 0;
}
除了手动控制,也可以使用unique_ptr(智能指针)工具,可以更容易和安全的完成任务,确保只有一个对象可以分配内存
#include <iostream>
#include <memory>
using namespace std;
class Human {
float dna;
public:
string face;
void walk() {
cout << "Walking...";
}
};
int main() {
cout << "Hi Mom\n";
unique_ptr<Human> ptrJeff(new Human);
ptrJeff->face;
ptrJeff->walk();
return 0;
}
现在运行你的代码,打开终端,使用g++工具来编译它
g++ demoOne.cpp -o demoOne
·-o 表示指定生成的编译后文件名,不带后缀,默认以exe后缀结尾
.\demoOne.exe
执行exe命令