C++简史

116 阅读4分钟

1. 简介

        c++是一种静态编译编程语言,以其广泛应用于软件基础架构而闻名,又以其难学而声名狼藉。 1979年由斯特劳斯特鲁普在贝尔实验室创建,受到Simula面向对象的启发,又有需要高性能的C,因此有了带类的C。

        C++的设计是C的超集,这意味着任何C程序在C++下都是合法的。所以也开创了‘零成本抽象’,像面向对象模式,多态性,封装和继承。

        当今它广泛应用于各种内存需求受限系统,如3A级别游戏的UE(unreal engine),编辑视频的AE(adobe after effects),数据库中的MySQLMongoDB,嵌入式系统中如面包机上的显示器等。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后缀结尾

image.png

.\demoOne.exe

执行exe命令

image.png