C++大纲及疑惑点一

Posted Luminary74

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C++大纲及疑惑点一相关的知识,希望对你有一定的参考价值。

目录

C++与C简单关系

  C++是对C一定上的“增强”。
  用C语言写的程序基本上可以无缝接入C++运行。
 C语言主要是面对过程的程序设计,而C++既可以用于面向过程的结构化程序设计,又可以用于面向对象的程序设计,是一种功能强大的混合型的程序设计语言。

面对对象的四大特性

抽象

数据抽象–>表示世界中一类事物的特性,就是对象的属性。比如鸟有翅膀,羽毛等(也可称为类的属性
过程抽象–>表示世界中一类事物的行为,就是对象的行为。比如鸟会飞行,会叫等(也可称为类的方法

封装

封装就是把过程和数据打包起来,对数据的访问只能通过已定义的界面。比如汽车就是对制动系统、止动系统、循环系统等的封装。

继承

一种联结类的层次模型,并允许和鼓励类的重用,提供一种明确的表达共性的方法。比如小轿车和大货车都是属于上述的汽车类,并拥有制动系统和止动系统等,继承了汽车的一部分特性,而小汽车和大货车又存在不同的地方。
可以想到,在写一些比较大的项目时,我们可以利用继承的思想,减少一些工作量。

多态

多态是允许不同类的对象对同一消息做出响应。比如,对猫和狗发出指令让它们叫一声,得到的回应是“喵喵”和“汪汪”。

数据类型与数据结构

计算机处理的对象是数据,而数据以某种特定的形式存在(例如整点、浮点数、字符等形式)。
具有相同特征的一类数据概况为一种数据类型。
不同的数据之间往往还存在某些联系,形成某种数据结构。
C++的数据包括常量与变量,常量与变量都具有类型。

数制

二进制是Binary,简写为B。
八进制是Octal,简写为O。
十进制为Decimal,简写为D。
十六进制为Hexadecimal,简写为H。

#include <bitset>  
#include<iostream>
using namespace std;  
int main()  
  
    cout << "35的8进制:" << std::oct << 35<< endl;  
    cout << "35的10进制" << std::dec << 35 << endl;  
    cout << "35的16进制:" << std::hex << 35 << endl;  
    cout << "35的2进制: " << bitset<8>(35) << endl;   //<8>:表示保留8位输出
    return 0;  

//来源于https://www.cnblogs.com/zwjjj/p/9953718.html

C++中的数据类型

常量

字面意思,常量的值是不能改变的。
常量的两大类:
(1)数值型常量(即常数)
1,-3,0L,020,0289H等——整形常量
2.3 、-2.12f、2.e2——实型常量
(2)字符型常量
‘c’ 、‘2’、‘\\n’——包含在两个单撇号之间的字符为字符常量。

浮点数的运算
#include <iostream> 
using namespace std;
int main()

	float a = 0.5f;
	float b = 0.25f;
	float c = a - b;
if (c==0.25)
	cout<<"对了!"<<endl;
else
	cout<<"错了!"<<endl;
return 0;


//输出结果:对了!
#include <iostream> 
using namespace std;
int main()

	float a = 0.65f;
	float b = 0.6f;
	float c = a - b;
if (c==0.05)
	cout<<"对了!"<<endl;
else
	cout<<"错了!"<<endl;
return 0;


//输出结果:错了!

为什么会出现这样的结果呢?

因为计算机所有数据都是基于二进制转化而来的,0.25可以转二进制,而0.05无法用二进制表示。

注释:0.05也能转二进制,但得看精度,能转成7位或8位的,超出float范围。
二进制里的 0.1 = 1/2 =0.5
二进制里的 0.01 = 1/4 = 0.25
二进制里的 0.001 = 1/8 = 0.125
依次类推,每小数点后多一个零,分母多除以2(因为是二进制)
如果是 0.111= 1/2 + 1/4 + 1/8 =0.825
这样就可以知道 0.05 = 1/20,
0.0001 = 1/16 明显比 1/20 要大,所以我们取0.00001 = 1/32 =0.3125
这样还不够, 再继续加 0.000011= 1/32 + 1/64 =0.046875 ,这也显然不够,再继续,所以最的结果为 0.05 = 0.00001101 = 0.05075 (注意这是约等于), 如果想更精确一点,还可以继续往下做,直到到取到一个尽可以接尽的值为止。

布尔型(bool)/逻辑型数据及其运算

C和C++中都用数值1表示“真”,用数值0表示“假”。
C++增加了逻辑型数据类型:bool型
逻辑型常量只有两个,即false(假)和true(真)
bool found,flag=false;
found=true;
逻辑型使程序直观易懂
在编译系统处理逻辑型数据时,将false处理为0,将true处理为1。
在实际中,非0被视为“真”,0被视为“假”
逻辑型数据可以与数值型数据进行算术运算
逻辑运算的规则照旧

变量

变量的定义
在程序运行期间其值可以改变的量称为变量。
一个变量,在内存中占据一定的存储单元。
变量的要素:变量名、变量值

数据类型 变量名1,变量名2,。。。变量名n

变量的初始化
复制初始化:int val=100;
直接初始化:int val(100);

二者区别可以参考一篇优秀的博文:
拷贝初始化和直接初始化的区别

C++的输入和输出

C++的输入和输出用“流”(stream)的方式实现。

流对象cin、cout和流运算符的定义存放在C++的输入输出流库iostream中;cout、cin并不是C++本身提供的语句,运算符<<和>>也不是C++本身提供的运算符 要在程序中使用cin、cout和流运算符,必须先: #include

格式:
cout<<表达式1<<表达式2<<……<<表达式n;
cin>>变量1>>变量2>>……>>变量n
插入运算符<<和提取运算符>>的优先级与结合性?
int a=1,b=4,c=8;
cout<<a,b,c; //输出1
cout<<a,b,c<<endl; //出错,如何理解?
cout<<a+b+c<<endl; //输出13

可以参考一下
C++优先级

cin和>>
cin不会读入空格、回车,将其当分隔符
cout和<<
用cout输出时,系统会自动判别输出数据的类型,使输出的数据按相应的类型输出。
在必要时,一条语句中多个数据输出合理分隔。

int a=4;
float b=345.7888435;
char c='a';
cout<<a<<'\\t'<<b<<' '<<c<<endl;
输出形式
4          345.789 a

输出格式可以有自己去控制更改
目标:输入输出时满足一些特殊的要求
Ø规定字段宽度
Ø保留的小数位数
Ø数据向左或向右对齐等。
方法:使用输入输出流中的控制符
Ø设置数值的基数(8,10,16)
Ø设置填充
Ø设置精度
Ø设置对齐
Ø设置其他方式

#include <iostream>
#include <iomanip> //不要忘记包含此头文件
using namespace std;
int main()

double d=225.0/7.0;
cout<<"d="<<d<<endl;
cout<<setiosflags(ios::fixed); 
cout<<"d="<<setprecision(5)<<d<<endl;
cout<<"d="<<setprecision(2)<<d<<endl;
return 0;

输出结果:
d=32.1429
d=32.14286
d=32.14

可以参考一下:
简单的I/O流格式控制

短路求值

定义:所谓短路求值是指当使用逻辑与(&&)和逻辑或(||)运算符进行表达式求值时,总是先计算其左操作数,然后再计算其右操作数。只有在仅靠左操作数的值无法确定整个逻辑表达式的值时,才会计算其右操作数

#include <iostream>
using namespace std;
int main()

    int a=3,b=3;
    (a=0)&&(b=5);
    cout<<a<<b<<endl; 
    (a=1)||(b=5);
    cout<<a<<b<<endl; 

运行结果:

为什么会输出这样的结果呢?
&&(与)
a=0为假,故没有对b进行操作;
a=1为真,故没有对b进行操作。

ps:复习用,如有错误请指正

以上是关于C++大纲及疑惑点一的主要内容,如果未能解决你的问题,请参考以下文章

C++大纲及疑惑点一

C++大纲及疑惑点三

C++大纲及疑惑点三

C++大纲及疑惑点三

C++大纲及疑惑点二

C++大纲及疑惑点二