《C++ Primer》第一章笔记

72 阅读2分钟

第一章 开始

  1. 每个 C++ 程序的其中一个函数必须命名为main,操作系统通过该函数运行 C++ 程序。
  2. 函数的四部分:返回类型、函数名、参数列表、函数体。
  3. 向对象的三个特性:封装、继承、多态。
  4. return语句返回的值的类型必须与函数的返回类型兼容,但不要求一致,返回值会被自动强制或截断成返回类型。
  5. endl的作用:结束当前行,并将与设备关联的缓冲区中的内容刷到设备中(🌟)。缓冲区刷新操作可保证到目前为止程序所产生的所有输出均写入输出六中,而非停留在内存中等待写入流。
  6. 命名空间:用于避免使用库中相同名字导致的冲突。标准库定义的所有名字均位于std中(🌟)。
  • 命名空间只能写在全局;命名空间可以嵌套;命名空间是开放的,随时可以加入新成员,但只能在加入后使用。
/* 定义命名空间 */
namespace name {
  /* 定义变量和函数 */
}
/* 匿名命名空间,类似于定义一个静态全局变量 */
namespace {
  int num = 10;
}
/* 等价于 */
static int num = 10;
int main(){
  cout << ::num << endl;
}

/* 匿名空间可以起别名 */
namespace new_name = old_name; 
  • 分文件编写代码时,若头文件中有两个命名空间,且其中的成员函数同名时,源文件实现函数需要添加命名空间。
/* 头文件 util.h */
#pragma once
#include <iostream>
using namespace std;

namespace util {
  void add();
}
/* 源文件 util.cpp */
#include <util.h>

void util::add(){
    ...
}
  1. 作用域运算符(::):用于访问某个作用域里面的成员。
  2. using声明(🌟)
  • 形式
/* 使某个命名空间中的指定函数或变量在一定作用域内可直接使用 */
using util::add;
/* 使整个命名空间中的所有函数或变量在一定作用域内可直接使用 */
using namespace util;
  • 作用:直接访问命名空间中的名字。
  • 注意
    • 每个名字均需独立的using声明,并使用分号结束。
    • 头文件不应包含using声明(🌟)。
  1. 读取数量不定的输入数据:数据读取操作在循环条件中完成(🌟)。当将一个输入流对象作为条件时,其效果是检测流的状态,当遇到文件结束符或无效输入(读入的值的类型与变量类型不符)时,流对象的状态变为无效,使存换条件为假。
while(std::cin >> value){}
  1. 成员函数(方法):类内定义的函数,通常使用类对象和点运算符调用成员函数。点运算符只能用于类类型。
  2. 头文件中的防卫式声明
#ifndef __COMPLEX__
#define __COMPLEX__

...

#endif