C++编程基础——基本数据类型、运算符、名字空间

C++编程基础

C++ 于1982年左右诞生于美国贝尔实验室。

C++:C Plus Plus,一门支持面向对象编程的高级语言。C++ 直接继承了C语言的几乎所有语法特性,并在此基础上新增了面向对象编程机制,比如类、对象、继承、多态等,还有一些对大型复杂软件项目开发有意义的语法特性,比如引用、重载、模板、RTTI、异常处理等。

C++ 程序运行效率略低于 C语言,但开发效率远高于 C 语言。

C++ 学习方法:C语言学会了就相当于已经学会了 C++ 大部分内容(85%),只需再学习一下 C++ 新增的内容即可完全掌握 C++,尤其是面向对象编程这块内容。

C++ 源文件的后缀名通常为 .cpp 或 .cc。

Linux平台常用:C++ 编译器:g++ 和 gcc。

sudo apt install -y g++

C++风格的头文件名称通常不带任何后缀名,C++标准库中的头文件全部如此。当然,C++编译器也支持 C 风格的的头文件。

基本数据类型

C++ 新增布尔类型(bool)和引用类型。

bool:占 1 Byte,对应两个字面量(常量):true 和 false。

引用类型(Reference):一种特殊的数据类型,相当于指针的包装,可以认为就是一个变量的别名,在大多数场合可以取代指针。

常引用(const reference)。

引用可以作为函数形参,实现引用传递的效果。如果函数内部无需改变指向的数据,请使用引用作为形参。

运算符

c++新增运算符:

  • new:用于在堆区中申请空间
  • delete:用于释放 new 申请的堆区空间
  • :::作用域运算符

注意:new/delete 运算符和malloc/free 函数虽功能一样,但内部实现细节有所不同,所以不能混用。

命名空间(Namespace)

解决变量、函数、类型等命名冲突的问题,因为来自不同命名空间中的这些名字可以相同。

全局命名空间

使用 namespace 关键字可以自定义命名空间

使用 using namespace 声明默认命名空间,尽量少用!

实例1(数据类型、运算符):

#include      //包含 iostream 头文件
#include        //等效 #include 
#include 
#include        //string类
using namespace std;  //使用 std 命令空间作为默认命名空间

struct Student{
    int sno;
    string name;
    float sight;
};


void my_swap(double& ,double& );
void set_stu(Student& );

int main()
{
    /*
    //布尔类型
    bool a = true;
    a = false;
    //cout << a << "1223"<< "dad" <
    
    /*
    //引用 
    int i = 3;

    //引用在声明时必须初始化,后续无法改变引用关系
    int& j = i;  //定义一个 int 引用 j,它指向变量 i,相当于 i 的别名,i、j代表同一块地址空间的内容
    j++;
    cout << i <

    /*
    //mallpc/free 写法
    double& d = *(double*)malloc(sizeof(double));
    d = 3.1467;
    cout << d << endl;
    free(&d);
    */

    /*
    //new/delete 写法
    double* p = new double;
    double& d = *p;
    d = 3.14;
    cout << *p << endl;//d
    delete &d;//p
    */

    /*
    //数组使用堆区
    int* nums = new int[10];
    
    nums[1] = 3;
    nums[2] = 9;
    
    cout << nums[2] </
    */

    /*
    //常引用
    int i = 3;
    const int* p = &i;
    const int& j = i;       //定义常引用,不能通过 j 改变空间的值(只读)
    int const& m = i;
    // *p = 5;  //错误
    // j = 5;   //错误
    i = 5;      //正确
    cout << m <

    /*
    //错误做法:常量不能作为非常量引用的右值
    const int i = 3;
    int& j = i;     //错误
    cout << j <

    /*
    //引用传参
    double d1,d2;
    cin >> d1 >> d2; //输入两个值
    
    my_swap(d1,d2);

    cout << d1 << " "<< d2 <
    /*
    Student s1,s2;
    s1.name = "小王";
    s1.sno = 1001;
    s1.sight = 5.1F;
    
    cout << sizeof(s1) <

    int a[3] = {2, 3, 4};
    int (&c)[3] = a; //引用的数组
    c[0] = 9;
    
    int *p = &a[2];
    p[-2]++;
    cout << p[-2] << endl;

    

    return 0;
}

void my_swap(double& a,double& b)
{
    double tmp =a;
    a = b;
    b = tmp;
}

void set_stu(Student& s)
{
    if(s.sno = 1003)
    {
        s.name = "琛翀";
        s.sight = 6.6;
    }
}

实例2(名字空间):

#include 
using namespace std;


int g = 3;

//声明一个命名空间nn
namespace nn{
    int g = 99999;
}

int main()
{
    int g = 4;

    std::cout << ::g <<std::endl;
    
                    //访问来自全局命名空间中的变量 g
    cout << ::g <<endl;

    //nn::g;
    std::cout << nn::g <<endl;
    return 0;
}

你可能感兴趣的:(C++杂乱笔记,c++,linux)