初学C++,坚决不能挂!

简介: 初学C++,坚决不能挂!

如果你上理论课也听不懂老师在讲什么

不如现在开始自学一些吧

期末再看看速成课

一定可以过的

Good Luck!

1、C++相对于C语言的不同

(1)C语言强调编程的算法,而面向对象(OOP)强调数据

(2)面向对象编程:将数据和方法合并在一起的类,并且具有继承与派生,多态等特性。继承是从旧类中派生出新类,多态为运算符和函数创建多个定义,通过编程上下文来确定使用哪个定义。

2、类(class)

类是具有相同属性和行为的一组对象的集合,它为属于它的全部对象提供了统一的抽象描述,其内部包括属性和行为两个主要部分,类是对象集合的再抽象。

3、类与实例(对象)的关系

组成类的对象均为此类的实例(Instance), 类是多个实例的综合抽象,实例是类的个体实物。


eg:


人类的定义:


class HUMANKIND
{ char *name;      //特征、属性、数据成员
double weight;    //特征、属性、数据成员
public:
void eat( );         //行为、操作、函数成员
void wear( );      //行为、操作、函数成员
void sleep( );     //行为、操作、函数成员
void travel( );     //行为、操作、函数成员
};

人类的实例:HUMANKIND XiaoMing;

4、头文件

C++为了兼容C,支持所有的C头文件,但为了符合C++标准,所有的C头文件都有一个C++版本,即去掉.h,并在名字前面加c。如 <cstring> 、 <cmath>、<cstdlib>,而<stdio.h>则是换成了<iostream>。

5、命名空间

假设有这样一种情况:一个班上有两个叫 Myon 的学生时,如何区分?


可用一些额外的信息,比如他们的家庭住址,或者他们父母的名字等等。


同样这样的情况也可能出现在 C++ 中:比如有两个相同的变量m,编译器就无法判断你使用的是哪个变量m,为了解决这个问题,我们就引入了“命名空间” ,它可作为附加信息来区分不同库中相同名称的函数、类、变量等。


本质上,命名空间就是定义了一个范围。


定义方式:

namespace name(命名空间名)
{
//代码声明
}
使用方式:
(1)name::code;    //code可以是变量或函数
(2)using name::code;
(3)using namespace name;

C++标准程序库中的所有标识符都被定义于一个名为std的namespace中。

来看个简单的例子

namespace A
{
  int a = 10;
}
namespace B
{
  int a = 20;
}
#include <iostream>
using namespace std;
int main()
{
  cout <<B::a << endl;
  cout <<A::a << endl;
}

这样我们就实现了区分不同库中的相同名称

namespace A   
{
  int a = 10;
}
namespace B
{
  bool a = true;  //布尔类型我们后面会讲
}
#include <iostream>
using namespace std;
int main()
{
  using namespace A;
  cout << a << endl;
  cout<<B::a << endl;
}

将前面的最后一句代码改为

   cout << boolalpha <<B::a << endl;

就会打印出bool类型的true或false


6、输入输出

C语言的输入输出主要是scanf()、printf()函数,而C++ 则是使用类对象cin、cout进行输入输出。


cin>> :istream对象,标准输入流对象


cout<< :ostream对象,标准输出流对象


endl:换行,并清空输出缓冲区(end line 结束一行,并另起一行)


\n照样可以在cout中使用


对于”>>” ,如果需要连续输入多个数据,可以有两种方法:


(1)每行只输入1个数据,以换行符结束(即输完一个数据敲一次回车)。

我们还是先来看一个简单的例子

#include <iostream>
using namespace std;
int main()
{
  int a, b;  //定义了两个整数
  cin >> a >> b;  //输入两个数
  cout << a <<endl<< b;  //输出我们输入的这两个数(中间<<endl是换行)
}

如果将<<endl去掉,输出的结果就不会换行

(2)一行输入多个数据,数据间用空格符隔开,以换行符结束一行数据的输入。

#include <iostream>
using namespace std;
int main()
{   
  char buf[32];
  int a;
  cin >> buf >> a ;
  cout << buf << a ;
}

 

7、位运算

(1)按位与(&)

(2)按位或(|)

(3)按位异或(^)

(4)取反(~)

(5)左移(<<) 右移(>>)

8、基本数据类型

C++和C的基本数据类型几乎一样:

char     short     int     float     double     unsigned     signed

但是C++中新增了一种数据类型:bool(布尔类型)

布尔类型对象可以被赋予文字值true或false,所对应的关系就是真与假的概念,即1,0

可以使用 boolalpha 打印出bool类型的true或false

看例子

bool compare(int a, int b)
{
  return a > b;
}
#include <iostream>
using namespace std;
int main()
{
  bool a = false;  //a为假,即a=0
  cout << sizeof(bool) << endl;  //输出bool类型的字节数
  cout << "a = " << a << endl;  //这种用双引号引起来的内容会被直接原样输出
  cout << "a = "<< boolalpha << a << endl;  //打印出bool类型的true或false
  cout << "compare = " << boolalpha << compare(7, 5) //判断a大于b的真假
  << endl;
}

由输出结果可见,布尔型变量只有一个字节。

9、结构体和三目运算符

在C语言中,定义结构体变量时struct关键字不能省略,但是在C++中是可以省略的。


C         struct Test Myon;   //对       Test my;   //错


C++      struct Test Myon;    //对       Test my;   //也是对的,关键字struct可以省略


三目运算符:XX ? XX : XX


在C语言中,条件表达式只能做右值      


int c = a > b? a:b;   //C和C++中都可以  


而在C++中,条件表达式能做左值和右值


a > b? a:b = 520;   //只能是用在C++中,在C语言中这样写是错的

看例子

#include <iostream>
using namespace std;
struct Test
{
  int num;
};
int main()
{
  Test first;
  first.num = 101;
  int a = 2, b = 0;
  (a > b ? a : b) = first.num; //相当于*(a>b?&a:&b)=101
  cout << "a = " << a << endl;
}

C语言中,表达是不能作为左值,因为表达式返回的是值

但C++可以,因为其返回的是变量本身

即C++编译器对三目运算符做了增强工作,返回的是值的地址

相当于*(a>b?&a:&b)=101

10、for循环

C++中引入了基于范围的for循环,for循环后的括号由冒号“ :”分为 两部分,第一部分是范围内用于迭代的变量,第二部分则表示被迭代的范围。

一般用法:

#include <iostream>
using namespace std;
int main()
{
int arr[] = { 1,2,3,4,5,6 };
for (int i = 0; i < sizeof(arr) / sizeof(arr[0]); i++)
  cout << arr[i] << "\t";  //\t表示空4格,相当于tab键
}

新用法:

#include <iostream>
using namespace std;
int main()
{
int arr[] = { 1,2,3,4,5,6 };
for (int i : arr )
  cout << i << "\t"; 
}

特点:从数组的第一个元素开始,逐个赋值给迭代变量 ,不依赖于下标元素,通用。

 

11、const

C语言中的const并不是真正的常量,是只读变量,有自己的存储空间,只是表示const修饰的变量不能作为左值,常量的值可以通过指针被间接改变。

而C++中的const常量,存在符号表中,没有存储空间,当对常量取地址操作时,会另外开辟内存空间。

#include <iostream>
using namespace std;
int main()
{
  const int a = 10;
  int* p = (int*)&a;
  printf("a===>%d\n",a);
  *p = 11;
  printf("a===>%d\n", a);
}

通过指针修改了a的值,但输出却没有变 。

12、类型别名typedef

为一个已有的数据类型另外命名,称为typedef声明


语法形式: typedef 已有类型名 新类型名表;


typedef int Area;


//声明Area为int的别名


typedef int (*DoubleIntFunction) (double);


//声明 DoubleIntFunction为“有一个double形参、返回值为int的函数的 指针”类型的别名


DoubleIntFunction funcPtr;

//声明一个具有该类型的名称为 funcPtr的函数指针,可以指向一个已经存在的函数代码的起始地址

#include <iostream>
using namespace std;
int transform(double a)
{
  return int(a);
}
int main()
{
typedef int Area;
typedef int (*DoubleIntFunction) (double);//声明DoubleIntFunction为“有一个double形参、返回值为int的函数的指针”类型的别名
    DoubleIntFunction funcPtr; //声明一个具有该类型的名称为funcPtr的函数指针,可以指向一个已经存在的函数代码的起始地址
    funcPtr = transform;
  cout << (3.5) << endl;
Area a = 12;
  cout << "a=" << a << endl;
}

总的来说1~10还是比较好理解的吧,但是11和12我自己其实还没太想清楚,可能也有点不好理解,不过这也是刚开始学嘛,慢慢来,C++后面的内容会继续更新,这是我自学过程的记录,也希望对初学C++的朋友能有所帮助,C++程序设计这门课一定不能挂!

目录
相关文章
|
前端开发
给网站“挂”上灯笼
给网站“挂”上灯笼
66 0
|
存储 NoSQL
3.10.0-693.5.2内核nfs客户端租约过期挂死问题分析
## 现象 1. 边缘存储两个节点fileserver,glance挂载物理机上的挂载点均出现挂住无法访问 2. 从客户端抓包看,客户端内核间隔5s向服务端发送renew租约请求,服务端返回NFS4ERR_EXPIRED,即租约过期错误,从抓包现象看客户端一直向服务端发送相同的clientid renew请求,服务端一直返回租约过期错误,导致挂载点无法恢复 ![](https://ata2-img
1704 1
3.10.0-693.5.2内核nfs客户端租约过期挂死问题分析
|
SQL 关系型数据库 MySQL
主库挂了,从库谋权篡位的那些事!
大家好,我是Leo。一个Java后端的程序员。之前我们介绍了MySQL如何保证高可用的相关技术点,比如可靠性优先策略,可用性优先策略,主从延迟,主从延迟的来源以及解决方案。今天我们继续上一篇文章遗留的问题作一个延伸,今天介绍一下从库的延迟问题!以及主库宕机,从库的抉择!
主库挂了,从库谋权篡位的那些事!
|
安全 前端开发 数据安全/隐私保护
记一次站点被挂马问题排查
起因,在下班准备回家之际,收到几条朋友发来的信息,说他的网站在百度搜索做信息流广告推广,但是从百度搜索点击打开就会跳转的博彩网站,让我帮忙排查下问题,是不是被挂马了,于是乎就开始了后面的故事 为了保护网站隐私,假定网站地址是:http://www.
1772 0
记一次站点被挂马问题排查
|
运维
服务挂了,怎么自动恢复?
架构设计上,避免单点,使用故障自动转移固然能够保证系统的高可用,是否还有其他的方案,让挂掉的服务自动启动呢,这里给大伙推荐一个常见的运维工具 supervisor。
1064 0
一主两从的环境,如果主库挂了,如何选举一个从库作为主库?
一主两从的环境,如果主库挂了,如何选举一个从库作为主库? 如图: 如果M挂了,怎么从S1和S2中选举一个从库作为主库? 传统复制的解决方法 (1)查看从库状态: S1:show slave status; S2:show slave status; root@l...
943 0
|
索引 安全 搜索推荐
服务器宕机可能的原因以及服务器宕机解决办法
服务器宕机可能的原因以及服务器宕机解决办法 服务器宕机是指服务器因为某些原因而导致服务器无法运转,造成网络无法正常使用。 对于网站来说,服务器宕机所造成影响很大,它不但造成访客无妨对网站进行访问,甚至还可能影响到网站在搜索引擎上的收录和排名, 因而在租用服务器时,建议站长选择想美国服务器这种出现宕机概率比较低的服务器。
4297 0
|
搜索推荐 网络安全 数据库
服务器宕机原因
服务器宕机原因 阿里云服务器经常CPU跑满,服务器宕机彻底解决方法 要解决这个问题首先先要知道问题出在哪里下面给大家介绍一下CPU跑满的一个案例 解决方法在文章最下方 CPU跑满的问题出现过很多次,最多的时候一天跑满四五次,整个网站在这样的环境下运营如何使得,发工单处理过几次,都是让重启服务器好的。
2977 0

热门文章

最新文章