C++入门<一> (跑路人笔记1)

简介: C++入门<一> (跑路人笔记)

如何学习C++

知乎大佬的见解:http://www.zhihu.com/question/23933514.



自己如何学习C++

既然C++以复杂的语法规则难搞懂的语法和冗长的格式来劝退众人所以如何学习C++就很重要了.

推荐的方法是


写博客

画思维导图(到后期) 画思维导图的工具:xmind、imindmap

看书

初期可以先看看《高质量程序设计指南C++/C语言》—看前大部分

前期看看《C++Primer》这本书不建议还没学完语法的时候看因为排布有一些问题,可以当做语言词典使用

中后期 《(More)Effective C++》

后期《深入理解C++对象模型》and《STL源码剖析》.



开始入门

命名空间

在C/C++中,变量、函数和后面要学到的类都是大量存在的,这些变量、函数和类的名称将都存在于全局作 用域中,可能会导致很多冲突。使用命名空间的目的是对标识符的名称进行本地化,以避免命名冲突或名字 污染,namespace关键字的出现就是针对这种问题的。


命名空间定义

定义命名空间,需要使用到namespace关键字,后面跟命名空间的名字,然后接一对{}即可,{}中即为命名 空间的成员。及namespace+名字+{}


namespace ssw//第一个命名空间
{
  int a = 10;
  int Add(int a, int b)//可放函数VS2019有警告.
  {
  return a + b;
  }
  namespace ssw2//嵌套的第二个命名空间
  {
  int m = 0;
  int n = 10;//可放变量
  struct Queue//可放类型
  {
    int a;
    int b;
  };
  }
}
int a = 0;
int m = 1;




ok,上面的代码大家也可以看出来命名空间里面可以放变量,函数,类型(如结构体或者联合体等),以及嵌套一个新的命名空间, 这样定义我们的变量我们就不用怕你和别人的变量起的名字冲突了,除非你的命名空间的名字都一样(不过概率很低因为我们的命名空间的命名都是使用项目名来使用的.)


注意:一个命名空间就定义了一个新的作用域,命名空间中的所有内容都局限于该命名空间中


也就是说我们在命名空间创建的变量和外面的以及其他命名空间的变量是相互独立的,哪怕名字类型都相同也是没有问题的.


那我们如何从命名空间里拿到我们的变量呢?


也很简单我们只需要按照命名空间姓名+::+内容名(及变量名或类型及函数名)即可.


如下图:


image.png


比如我们想访问ssw里的a元素我就只需要ssw::a;即可这个ssw::a可以正常的像一般变量那样正常使用可以进行赋值,传参,运算......就跟普通变量一样.(类型和函数同理)


::这个还可以帮助我们访问全局变量


如下图:


image.png


也就是说只要是::+全局变量名就可以访问到全局变量了—这个在又有全局又有局部的时候能用


但是有时候我们想把一个命名空间里的东西放出来(及可以直接使用变量名来使用,之前的命名空间姓名+::+内容名(及变量名或类型及函数名)形式还可以使用)又要怎么做呢?


使用using这个关键字


比如我们想把ssw里的所有东西都放出来就using namespace ssw 想把ssw2里的都放出来就using namespace ssw:: ssw2


如果我只是想将ssw里的a这个变量放出来就可以using ssw::a即可.


image.png


但是要注意的是我们把a放出来后就不能在在全局部分再创建一个a了,不然会无法编译.


如下图:(虽然没有报错但是无法编译,所以大家放变量出来的时候一定要注意)


image.png


C++的输入输出

这个时候我们就可打印"Hello World!"了,梦开始的地方了属于是.


#include<iostream>
using namespace std;
int main()
{
  cout << "Hello World" << endl;
  return 0;
}




对这个世界问过好了之后我们来拆解一些这个打印到底都在感谢什么.这个cout和endl是啥这个<<以及前面为啥又多了个using namespace std;.


cout是标准输出对应的还有cin然后endl其实就是\n是C++里的换行符.


至于using namespace std;则是因为我们的cout是放在一个命名空间叫std的命名空间内想要普通的使用就要用using namespace std;不过在cout和endl前加std::也可.


而且cout和cin不用指认类型可以直接使用



image.png

相关文章
|
4月前
|
C++
C++入门13——详解多态2
C++入门13——详解多态2
98 1
|
4月前
|
存储 安全 编译器
【C++打怪之路Lv1】-- 入门二级
【C++打怪之路Lv1】-- 入门二级
41 0
|
4月前
|
自然语言处理 编译器 C语言
【C++打怪之路Lv1】-- C++开篇(入门)
【C++打怪之路Lv1】-- C++开篇(入门)
48 0
|
4月前
|
分布式计算 Java 编译器
【C++入门(下)】—— 我与C++的不解之缘(二)
【C++入门(下)】—— 我与C++的不解之缘(二)
|
4月前
|
编译器 Linux C语言
【C++入门(上)】—— 我与C++的不解之缘(一)
【C++入门(上)】—— 我与C++的不解之缘(一)
|
23天前
|
C++ 芯片
【C++面向对象——类与对象】Computer类(头歌实践教学平台习题)【合集】
声明一个简单的Computer类,含有数据成员芯片(cpu)、内存(ram)、光驱(cdrom)等等,以及两个公有成员函数run、stop。只能在类的内部访问。这是一种数据隐藏的机制,用于保护类的数据不被外部随意修改。根据提示,在右侧编辑器补充代码,平台会对你编写的代码进行测试。成员可以在派生类(继承该类的子类)中访问。成员,在类的外部不能直接访问。可以在类的外部直接访问。为了完成本关任务,你需要掌握。
63 19
|
23天前
|
存储 编译器 数据安全/隐私保护
【C++面向对象——类与对象】CPU类(头歌实践教学平台习题)【合集】
声明一个CPU类,包含等级(rank)、频率(frequency)、电压(voltage)等属性,以及两个公有成员函数run、stop。根据提示,在右侧编辑器补充代码,平台会对你编写的代码进行测试。​ 相关知识 类的声明和使用。 类的声明和对象的声明。 构造函数和析构函数的执行。 一、类的声明和使用 1.类的声明基础 在C++中,类是创建对象的蓝图。类的声明定义了类的成员,包括数据成员(变量)和成员函数(方法)。一个简单的类声明示例如下: classMyClass{ public: int
42 13
|
23天前
|
编译器 数据安全/隐私保护 C++
【C++面向对象——继承与派生】派生类的应用(头歌实践教学平台习题)【合集】
本实验旨在学习类的继承关系、不同继承方式下的访问控制及利用虚基类解决二义性问题。主要内容包括: 1. **类的继承关系基础概念**:介绍继承的定义及声明派生类的语法。 2. **不同继承方式下对基类成员的访问控制**:详细说明`public`、`private`和`protected`继承方式对基类成员的访问权限影响。 3. **利用虚基类解决二义性问题**:解释多继承中可能出现的二义性及其解决方案——虚基类。 实验任务要求从`people`类派生出`student`、`teacher`、`graduate`和`TA`类,添加特定属性并测试这些类的功能。最终通过创建教师和助教实例,验证代码
46 5
|
23天前
|
存储 算法 搜索推荐
【C++面向对象——群体类和群体数据的组织】实现含排序功能的数组类(头歌实践教学平台习题)【合集】
1. **相关排序和查找算法的原理**:介绍直接插入排序、直接选择排序、冒泡排序和顺序查找的基本原理及其实现代码。 2. **C++ 类与成员函数的定义**:讲解如何定义`Array`类,包括类的声明和实现,以及成员函数的定义与调用。 3. **数组作为类的成员变量的处理**:探讨内存管理和正确访问数组元素的方法,确保在类中正确使用动态分配的数组。 4. **函数参数传递与返回值处理**:解释排序和查找函数的参数传递方式及返回值处理,确保函数功能正确实现。 通过掌握这些知识,可以顺利地将排序和查找算法封装到`Array`类中,并进行测试验证。编程要求是在右侧编辑器补充代码以实现三种排序算法
36 5
|
23天前
|
Serverless 编译器 C++
【C++面向对象——类的多态性与虚函数】计算图像面积(头歌实践教学平台习题)【合集】
本任务要求设计一个矩形类、圆形类和图形基类,计算并输出相应图形面积。相关知识点包括纯虚函数和抽象类的使用。 **目录:** - 任务描述 - 相关知识 - 纯虚函数 - 特点 - 使用场景 - 作用 - 注意事项 - 相关概念对比 - 抽象类的使用 - 定义与概念 - 使用场景 - 编程要求 - 测试说明 - 通关代码 - 测试结果 **任务概述:** 1. **图形基类(Shape)**:包含纯虚函数 `void PrintArea()`。 2. **矩形类(Rectangle)**:继承 Shape 类,重写 `Print
44 4