头文件的使用

  1. #include <iostream> // 直接到公共目录中去查找
  2. #include "iostream" // 先查找当前目录,如果当前目录没有,在去公共目录中查找

面向对象编程OOP之C++

  • 对象
  • 封装
  • 数据隐藏
  • 多态
  • 继承
  • 泛型编程

    机器语言与编译器与高级语言

  • 一种被称为编译器的特殊程序将高级语言翻译成特定的计算机的内部语言(机器可识别的电流),每个平台使用不同的编译器来在不同的平台上使用同一种高级语言。

  • 通用性,可移植性,可移植性的第一个障碍是硬件特定的程序是不可移植的,所以可以将依赖于硬件的部分放在函数模块中,可以最大限度地降低可移植性问题,这样只需要重新编写这些模块即可;可移植性的第二个障碍是语言上的差异,口语的确可能产生问题;

  • C++程序可以使用已有的C软件库。库是编程模块的集合,可以从程序中调用它们。库对很多常见的编程问题,提供了可靠的解决方法,因此能节省程序员大量的时间和工作量。也有助于C++的广泛传播

    C++的编译与运行

  1. 源代码
  2. 编译器
  3. 目标代码
  4. 链接程序(库代码,启动代码)
  5. 可执行程序

g++ -std=c++0x Name.app // -std=c++0x版本标识,使用c++98还是c++11编译

  1. c++ -std=c++11 ./test.cpp

g++ Name.app -lg++ // -lg++ 有些版本可能要求链接C++库

C++实现 源代码文件的扩展名
Unix C,cc,cxx,c
GUN C++(主要Linux中在使用) C,cc,cxx,c,cpp,c++
Microsoft Visual C++ cpp,cxx,cc
其他 cp

gcc/g++的版本不能低于4.8
python 2.6或者2.7
GNU Make 版本不能低于3.81

可以用以下指令检查是否满足要求
gcc -v
g++ -v
python -V
make -v

  1. g++ Name.app // 生成a.out文件
  2. ./a.out // 直接运行即可

C++ 预处理器及其命名空间的使用

  • c与c++的老式头文件以.h结尾,新的可以没有后缀名。
  • 新旧版本的头文件 cmath(新版本)math.h(旧版本) ```cpp

    include // 预处理

int main() { using namespace std; // 引入命名空间 // std::cont << “…” << endl; cout << “hello world! lijunyang”; cout << endl; cout << “end” << endl; return 0; }

  1. <a name="z2snz"></a>
  2. ### if else
  3. ```bash
  4. #if defined(CREDIT)
  5. credit();
  6. #elif defined(DEBIT)
  7. debit();
  8. #else
  9. printerror();
  10. #endif

C++语言的使用

  • cout 输出
  • cin 输入
  • endl 换行符号,可以用”\n”代替

    1. cout << sizeof(a) << "\n";
    2. cout << sizeof(a);

    cout<<sizeof(a) <<”\n”;

  • cmath的sqrt()接受一个double参数,返回此数的平方根

  • include 提供了sizeof()方法,可以返回类型的长度,和符号常量

  • 012,0X11,0x11;0开头的数字表示8进制数,0x或0X开头表示16位数字
  • cout.put()方法返回一个字符
  • const 声明常量
  • 浮点数E表示法2.52E+8,2.52E-5;E+8表示乘以正的8次方,E-5表示除以5的10次方
  • 1.1l,1.1L,1.1F,1.1f;L或l表示long double,F或f表示float
  • SB语法之类型转行 int a(3.3); 此语法表示声明一个a变量,并将浮点数转换为整数,int a = (int) 3.3;此为老语法,老语法比较易读。还可以使用int a {3};
  • auto 声明,auto a = 3; auto b = 3.3; 此时a是int类型,b是double类型 ```cpp

    include

    include

    include

int main() { using namespace std; double area; int a = 66; char b = a; const int c = 77; cont << c << endl; cout << a << endl; cout << b << endl; cout << “int is “ << sizeof(int) << “ bytes” << endl; cout << “max_int “ << INT_MAX << endl; cout << “请输入您要求平方根的数字” << endl; // 注意,如果输入的是字符串或字符,area的值会是0 // 如果输入 1.1.1 会获取符合条件的内容值 1.1 cin >> area; double side; side = sqrt(area); cout << “此数的平方根是” << side << endl; return 0; }

  1. <a name="6AolC"></a>
  2. ## 复合类型
  3. <a name="GJQhg"></a>
  4. ### 数组
  5. ```cpp
  6. typeName arrayName[arraySize];
  7. int a[10]; // 会自动进行初始化,所有下标位都为0;
  8. int a[10] = {1,2,3}; // 会自动补位其他位为0;
  9. int a = {1,2,3};

字符数组char[size]与String字符串

  • 提供了

—strlen(charArray); // 返回char[]的可见长度
—strcpy(charArray1, charArray2); // 复制字符串到字符数组
—strcat(charArray1, “abc”); // 追加字符串到字符数组

  • 提供了string.size();

—string.size(); // 返回字符串长度

  • 字符串输入 cin.getline(variableName, Size);cin.get(variableName, Size);

—cin.getline()读取一行,直到达到换行符,随后丢弃换行符
—cin.get()读取一行,换行符保留在输入序列中
—cin.clear();
— 有两个问题1,空行问题,输入长度超过预设长度

  • 解决输入长度超过预设长度的问题

—getline(cin, stringVariable);

  • 新的char的数据类型

— wchar_t title[] = L””; // wchar_t string
— char16_t name[] = u””; // char16_t string
— char32_t name[] = U””; // char32_t string
— 一种新的输出方式,原始字符串输出方式, cout << R”(\n””)”; // 可以输出\n””,如果要在原始字符串中输出()的话,必须由 R”+( 开头由 )+”结束

char a[8] = {'a', 'b'}; // 其他位自动补充\0
char a[8] = "abcdefg";
char a[] = "abcdefg";

#include <cstring>
#include <iostream>
#include <climits>
#include <string> // <cstring> 提供了strlen(charArray);
int main()
{
    using namespace std;
    char a[15] = "a";

    cout << strlen(a) << endl; // 返回1,strlen(a)此方法只计算可见字符
    cout << sizeof(a) << endl; // 返回15

    string str1 = "abcd";
    string str2 = "efgh";
    cout << str1.size() << endl; // 4
    char b[20];
    strcpy(b, a);
    cout << b << endl; // a
    strcat(b, "abcd"); // 字符串连接 
    cout << b << endl; // aabcd
}

结构体

struct Goods {
    char name[20];
    int id;
    double price;
}

Goods a {
    "goodsA",
    1,
    500.00
}

Goods a = { //  = 号可以省略
    "goodsB",
    1,
    500.00
}

struct GoodsClass {
    char name[20];
    int classId;
    int parentClassId;
} my1, my2; // 定义2个变量 也可以在这里赋初值

Goods goodsArr[2] = {
    { "goodsB", 2, 500.00 },
    { "goodsC", 3, 500.00 }
}

struct structure { // 结构体中使用位字段,可以便于对应硬件设备上的寄存器对应的数据结构,非常方便
    unsigned int SN : 4;
    unsigned int : 4;
    bool goodIn : 1;
    bool goodTorgle : 1;
}

共用体

共用体就是多种类型公用一段公共的内存段,以达到节省内存的目的

union one4all {
    int int_val;
    long long_val;
    double double_val;
}

one4all a;
a.int_val;
a.long_val;
a.double_val;

枚举

#include <iostream>
int main(){
    using namespace std;
    enum week {
      Sun,
      Mon,
      Tues,
      Wed,
      Thur,
      Fri,
      Sat
    };
    week a;
    a = Mon;
    cont << a << endl; // 输出1 ,a的类型为week时,只能接受枚举的值,不能接受其他值
    cout << Sun << endl; // 输出0
    return 0;
}