C++学习:初识篇(c和c++区别等)

C与C++区别:

1.输入输出

c语言的输入输出`

#include<stdio.h>//头文件
int a;
scanf("%d",&a);//输入
printf("%d",a);//输出

c++的输入输出

#include<iostream>//头文件
using namespace std;//打开std命名空间
int a;
cin>>a>>endl;//cin是预定义好的输入流对象名,>>是提取运算符,从键盘取输入
cout<<a;//cout是预定义的输出流对象名,<<是插入运算符。endl用于换行

俩种语言输入输出优缺点:
scanf是格式化输入函数,cin是标准化输入流对象,scanf对类型有要求,cin不区分类型
例: int a;
char ch;
scanf("%d %c",&a,&ch);
cin>>a>>ch;
注意:cin不允许cin>>a,ch,必须每一个变量前都要有提取符>>

cout相对于printf的缺点是:
例:
printf(“a=%d”,a);
而cout是这样的
cout<<“a=<<a<<”<<endl;
输出较为麻烦。

2.常量的区别

c语言:

#define Pi 3.14//宏常量
#define MAX 10
enum {LEN=10};//枚举常量

c++:

const int max=10;//常变量

define与cinst的区别:
define 定义的是宏常量
1. 宏常量在预编译的时候进行替换
2. 宏常量不分配空间
3. 宏常量并没有类型

const 修饰的是常变量
1. 常变量在编译时进行替换
2. 常变量分配空间
3. 常变量会有类型的检查

3. 引用

引用 & :就是别名/外号, 一旦引用初始化为某个变量,就可以使用引用名称直接使用该变量,就是给该变量起了个别名

引用的特点:1.没有空引用 2.定义引用时必须进行初始化 3.没有二级引用
引用使用的例子:

void Swap_cpp(int &a, int &b)//在函数中对a,b的交换,就是对实参的交换
{
	int tmp = a;
	a = b;
	b = tmp;
}
int main()
{
    int x=10;
    int y=20;
    Swap_cpp(x,y);
}

形参中的a,b是x,y的别名,也就是引用。直接进行交换x,y的数据

4.函数重载

c语言中不支持函数重载,因为它编译时只对函数名生成符号
而c++支持重载,它在形成符号时,不仅关联函数名,还有形参。
所以重载函数的依据是:
1.参数类型
2.参数数量
但函数的返回值不能区分重载函数,因为编译器不能识别返回值类型

5.默认形参

C++函数的形参可以带默认值,参数列表的默认值从右向左依次给,不能跳着给

调用函数时,实参是从左向右依次给,不能跳着给

void Cpp(int a,int b=0,int c,int d=10)//错误,不能跳着给
void Cpp(int a,int b,int c=1,int d=10)//正确
int main()
{
    Cpp(1, ,2 );//错误
    Cpp(1,2);//正确
}

6.开辟空间方法不同

c语言:

int *p = (int *)malloc(sizeof(int));
free(p);

c++

int *s = new int;//开辟一个整型空间
int *p = new int(10);//开辟并初始化
delete s; 

开辟数组空间:

int n;
cin>>n;
int *p = (int*)malloc(sizeof(int)*n);//C语言
int *s = new int[n];//C++
int *t = new int[n](100);//开辟并初始化,C99标准
free(p);
delete []s;
delete []t;

类与对象:

现实世界中的实体可以抽象出类别的概念。对应于计算机世界就有一个类(class)的概念,因为类是一个抽象的概念的对应体,所以计算机不给它分配内存,只有当类实例化为对象时,给对象分配内存
在这里插入图片描述

类是设计的产物,对象是对类的实例化,设计类型时并没有给其开辟空间,实例化为对象后开空间,我们操作的是对象,而不是类。

对象

对象是类的实例。声明一种数据类型只是告诉编译系统该数据类型的构造,并没有预定内存。设计出来的类只是一个样板,以此样板可以在内存中开辟出同样结构的实例——对象。

创建类的对象可以有两种方法:

1.直接定义类的实例对象,创建在栈区:CGoods Car; int I;
2.动态创建类的对象,创建在堆区:CGoods *p = new CGoods();

类与对象

1.四种访问类型
缺省
pricate 私有
public 公有
protected 保护
如果在类起始点无访问说明符号,系统默认为private。

2…编译过程
1).对属性的识别
2).对方法的识别
3) .改写类的方法成员
改写的方法如下:
原方法:

void CGoods::RegisterGoods(char name[], int amount, float price)
{
	strcpy(Name, name);
	Amount = amount;
	Price = price;
}

编译器会改写为:

void CGoods::RegisterGoods(CGoods *const this, char name[],int amount,float price)
{
	strcpy(this->Name, name);
	this->Amount = amount;
	this->Price = price;
}

在类里面识别到的属性和类成员函数属性同名时,就会加上this指针,这是编译器编译时自动加的,我们也可以手动加,编译时系统就不给你加了。
而主函数此时变化是这样的:

int main()
{
	CGoods x;
	CGoods y;
	x.RegisterGoods("C++",16,94);
	y.RegisterGoods("Java",10,88);
}

//变为:
RegisterGoods(&x,"C++",16,94);
RegisterGoods(&y,"Java",10,88);

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值