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

相关文章
|
2月前
|
C++
C++入门13——详解多态2
C++入门13——详解多态2
87 1
|
2月前
|
存储 安全 编译器
【C++打怪之路Lv1】-- 入门二级
【C++打怪之路Lv1】-- 入门二级
28 0
|
2月前
|
自然语言处理 编译器 C语言
【C++打怪之路Lv1】-- C++开篇(入门)
【C++打怪之路Lv1】-- C++开篇(入门)
37 0
|
2月前
|
分布式计算 Java 编译器
【C++入门(下)】—— 我与C++的不解之缘(二)
【C++入门(下)】—— 我与C++的不解之缘(二)
|
2月前
|
编译器 Linux C语言
【C++入门(上)】—— 我与C++的不解之缘(一)
【C++入门(上)】—— 我与C++的不解之缘(一)
|
25天前
|
存储 编译器 C语言
【c++丨STL】string类的使用
本文介绍了C++中`string`类的基本概念及其主要接口。`string`类在C++标准库中扮演着重要角色,它提供了比C语言中字符串处理函数更丰富、安全和便捷的功能。文章详细讲解了`string`类的构造函数、赋值运算符、容量管理接口、元素访问及遍历方法、字符串修改操作、字符串运算接口、常量成员和非成员函数等内容。通过实例演示了如何使用这些接口进行字符串的创建、修改、查找和比较等操作,帮助读者更好地理解和掌握`string`类的应用。
38 2
|
1月前
|
存储 编译器 C++
【c++】类和对象(下)(取地址运算符重载、深究构造函数、类型转换、static修饰成员、友元、内部类、匿名对象)
本文介绍了C++中类和对象的高级特性,包括取地址运算符重载、构造函数的初始化列表、类型转换、static修饰成员、友元、内部类及匿名对象等内容。文章详细解释了每个概念的使用方法和注意事项,帮助读者深入了解C++面向对象编程的核心机制。
83 5
|
1月前
|
存储 编译器 C++
【c++】类和对象(中)(构造函数、析构函数、拷贝构造、赋值重载)
本文深入探讨了C++类的默认成员函数,包括构造函数、析构函数、拷贝构造函数和赋值重载。构造函数用于对象的初始化,析构函数用于对象销毁时的资源清理,拷贝构造函数用于对象的拷贝,赋值重载用于已存在对象的赋值。文章详细介绍了每个函数的特点、使用方法及注意事项,并提供了代码示例。这些默认成员函数确保了资源的正确管理和对象状态的维护。
80 4
|
1月前
|
存储 编译器 Linux
【c++】类和对象(上)(类的定义格式、访问限定符、类域、类的实例化、对象的内存大小、this指针)
本文介绍了C++中的类和对象,包括类的概念、定义格式、访问限定符、类域、对象的创建及内存大小、以及this指针。通过示例代码详细解释了类的定义、成员函数和成员变量的作用,以及如何使用访问限定符控制成员的访问权限。此外,还讨论了对象的内存分配规则和this指针的使用场景,帮助读者深入理解面向对象编程的核心概念。
88 4
|
2月前
|
存储 编译器 对象存储
【C++打怪之路Lv5】-- 类和对象(下)
【C++打怪之路Lv5】-- 类和对象(下)
31 4