C++笔记1

C++

07-26

一、语言的分类

  1. 机器语言(开发效率最低,执行效率最高)
  2. 汇编语言
  3. 高级语言(开发效率最高,执行效率最低)(解释型语言的效率低于编译型语言的效率)

计算机是基于电工作的,能直接理解的就是高低电平对应的0101二进制指令,而直接用二进制编程的语言就是机器语言,这种语言执行效率高,因为计算机可以无障碍理解,但是开发效率低,复杂度极高,因为要写一大堆0101这种二进制数,才能实现一个很小的功能。

汇编语言用一组标签,代表一系列二进制指令,相对于机器语言,汇编语言用英文标签编写程序相对简单,执行效率低,还是相对复杂,开发效率依旧很低。但是直至今日,汇编语言依旧用于直接访问硬件,或者定位设备驱动和嵌入式系统上底层性能问题。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-2BP7bXGG-1691492206044)(D:\c++\7-26\资源\汇编指令.png)]

高级语言是站在人的角度,用人的思维去编写程序,但是高级语言离硬件较远,而计算机则需要通过编译,最终转为二进制,计算机才能理解,所以高级语言的效率,相较于前面两种语言会低一点,但是开发效率得到了极大的提升,在高级语言中,按照编译方式的不同,又分为编译型语言和解释型语言
计算机高级语言分为:解释型和编译型

  1. 解释型:python —>
  2. 编译型:C++/C —> 编写源代码、编译、连接

编译型语言:源代码中一处有错,就不允许编译,优点:直接运行最终产物,最终产物是二进制代码,所以快,效率高
解释型语言:编写源代码,一行一行解释执行,而不是一次编译全部代码。优点:源代码有错也能执行,执行到错误的再停下。缺点:不断对源代码进行解释执行、解释执行的操作。由于解释型程序是将翻译过程放到执行过程中,这就决定了解释型注定比编译型慢上一大截,而且每次运行程序,都要对源代码进行重新解释,而不是执行最终产品,所以解释型速度比编译型慢上一大截。
深入编译型:
C++语言是C语言的超集,C语言是C++语言的子集,但是两者仍有一些区别。
根据编译运行程序生成exe文件:预编译、编译、链接、载入

#include<iostream>
using namespace std;

int main(){
	cout << "hello world";
	return 0;
}

#在dev c++ 编译选项中加入代码  --save-temp 这样可以保存编译过程中生成的文件,要不然只会生成.exe文件
.c为后缀的文件,C语言源代码文件;
.a为后缀的文件,是由目标文件构成的档案库文件;
.C,.cc或.cxx 为后缀的文件,是C++源代码文件;
.h为后缀的文件,是程序所包含的头文件;
.i 为后缀的文件,是已经预处理过的C源代码文件;
.ii为后缀的文件,是已经预处理过的C++源代码文件;
.m为后缀的文件,是Objective-C源代码文件;
.o为后缀的文件,是编译后的目标文件;
.s为后缀的文件,是汇编语言源代码文件;
.S为后缀的文件,是经过预编译的汇编语言源代码文件。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-oBfuxeGP-1691492206044)(D:\c++\7-26\资源\预编译、编译、链接.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-wIcY85PO-1691492206045)(D:\c++\7-26\资源\编译运行中生成的文件.png)]

预编译:主要包括宏替换、文件包含和条件编译三个部分,经过此步骤完成的程序仍然是C/C++程序

编译(compile):就是将用户代码的高级语言翻译成计算机可以理解的机器语言,将用户编写的文件编译成一个个可连接的模块(.o(Unix/Linux)或.obj文件)。在此过程中,编译器只是检查语法、变量和函数等是否被声明,如果没有声明编译器会给出一个错误或警告。但是,仍然是可以生成.o或.obj文件。

链接(link):将一组编译好的模块(.obj)连同相应的库函数连接在一起形成一个可以载入的完整载入模块。在link过程中,主要是链接函数和全局变量。主要操作的就是.obj或.o文件。有时我们的cpp文件太多,生成的.o或.obj文件太多,我们要给中间的目标文件打个包,在windows下就叫库文件(Library Files),也就是.lib文件。在unix和Linux下就是Arcchive File,也就是.a文件。这时候,如果链接的相应函数找不到或者没有定义,那么就会有LINK2001错误出现。

载入:载入过程比较简单,就是将链接生成的.exe文件载入内存。

cpp—>obj—>exe

面向对象和面向过程
面向:按照…思路
过程(procedure):C、procedure
对象(object ):C++、Python

面向过程(Procedure Oriented 简称 PO):把事情拆分成几个步骤(相当于拆分成一个个的方法和数据),然后按照一定的顺序执行。
面向对象(Object Oriented 简称 OO):面向对象会把事物抽象成对象的概念,先抽象出对象,然后给对象赋一些属性和方法,然后让每个对象去执行自己的方法

面向过程:
放衣服(方法)–>加洗衣粉(方法)–> 加水(方法)–> 漂洗(方法)–> 清洗(方法)–> 甩干(方法)

面向对象:
new 出两个对象 ”人“ 和 ”洗衣机“
”人“ 加入属性和方法:放衣服(方法)、加洗衣粉(方法)、加水(方法)
”洗衣机“ 加入属性和方法:漂洗(方法)、清洗(方法)、甩干(方法)
然后执行:
人.放衣服(方法)-> 人.加洗衣粉(方法)-> 人.加水(方法)-> 洗衣机.漂洗(方法)-> 洗衣机.清洗(方法)-> 洗衣机.甩干(方法)

二、cout语句

#include<iostream>
using namespace std;

int main(){
	cout << "|";
	cout << " ";
	cout << " ";
	cout << "|";
	cout << endl;
	

	cout << "|" << "  " << "|" << endl ;
	
	cout << "|  |";
	
	return 0;

}

三、cin语句

#include<iostream>
using namespace std;

int main(){
	char a;
	
	cin >> a;
	
	cout << "   " << a << endl;
	cout << "  " << a << a << endl;
	cout << " " << a << a << a << endl;
	cout << a << a << a << a << endl;
	
	return 0;
}
	

表示运算速度是1000
表示存储是1024

变量赋值与值传递和引用传递

#值传递和引用传递
def addOne(a): 
    print(a)                
    a = a+1            
    print(a)   

a=1
addOne(a) #在python中实参的引用传递给形参    
                            
print(a)

问:为什么是引用传递,传递了底层的地址,但是a还是没有改变

变量赋值看地址

#include<iostream>
using namespace std;

int main(){

	int a = 1;
	int *p = &a;
	cout << p << endl;
	
	a = 2;
	p=&a;
	cout << p << endl;

}
a = 1
print(id(a))

a=2
print(id(a))

python地址变化,c++地址不变,python不需要显式声明数据类型,但是浪费地址。
模运算 —> 取余运算

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值