C++ :一、C++中的基础小点

(一)C++中的输入与输出

在C++中,输入和输出操作需要引入标准库中的iostream头文件实现。为了简化代码,可以使用 using name space,来使用std命名空间。

与C语言不同的是,C++在实现基本数据类型的输入输出时,不需要知道其具体的类型,这使得代码更加的简单。

//1.输入与输出
	int a, b;
	cin >> a >> b;//提取运算符,只能输入基本类型,其他需要重载
	cout << "a=" << a << "b=" << b << endl;//endl=='\n'

使用cin进行输入时,使用>>从标准输入(大多是键盘)读取数据。

使用cout进行输出时,使用<<将数据发送到标准输出(大多是屏幕)。

(二)不同的初始化方法

在C语言中,以下的初始化方法是我们经常见到的:

char cha = 0;//  ascll: 0

而在C++中,我们还可以这么做:

char cha { '0' }; //统一初始化,可以用于多种类型的初始化
char chb('\0');//直接初始化

这么做有当然有一个优点,安全性更高,可以帮我们检查数据是否和数据类型匹配,比如:

int a = 12.23;//通过,a截断为12
int a{ 12.23 };//编译不通过

(三)const

1.用法

常量变量:使用const可以声明一个常量变量,其值在初始化后不能被修改:

const int a = 100;

指针:当const与指针结合使用时,根据const的位置不同,有三种解释方式:

const int* ptr = &a; // ptr可以指向不同的int,但不能通过ptr修改a的值
int* const ptr = &a; // ptr不能指向其他位置,但可以通过ptr修改的值
const int* const ptr = &a; // ptr不能指向其他位置,也不能通过ptr修改a的值

2.编译的不同

这样一段代码在C和C++中,有什么不同呢?

const int a = 10;
int* p = (int*) & a;
*p = 100;
int b = a;

(此代码属于未定义行为,例子不太恰当) 

虽然是相同的一段代码,但在C语言和C++中的结果完全不同,

在C中:   最终b的值为100 ,

而C++中: 最终b的值为10,

这是因为:用const修饰的常变量,c++在编译为.obj时,会将a替换为10(类似于define)。

cout << "a=" << a << endl;//10
cout << "*p=" << *p << endl;//100
cout << "b=" << b << endl;//10

除了上面这个不同外,当然还有其他的不同:

int arr[a];//C:err因为在编译的时候会从内存读取a的值,  C++ 正确

3.兼容规程

int a = 10, b = 20;
const int* p = &a;

int* s1 = p; // err
const int* s2 = p;
int* const s3 = p; // err
const int* const s4 = p;

//可以通过s修改p所指向的值,而p指向的不允许被改

可以通过s修改p所指向的值,而p指向的不允许被改 :

int a = 10, b = 20;
int * const p = &a;

int* s1 = p;
const int* s2 = p;
int* const s3 = p;
const int* const s4 = p;

//p是一个常量指针,所以它可以安全地赋值给其他常量指针和普通整数指针

p是一个常量指针,所以它可以安全地赋值给其他常量指针和普通整数指针。 

(四)引用

引用提供了一种访问另一个变量的别名,在声明时必须要初始化,并且一旦绑定到一个变量上,就不能再改变,通过它可以更高效地操作数据,同时保持代码的简洁性和可读性。

基本语法如下:

int a = 10;
int& b= a; // b是a的引用

在这个例子中,b是 a 的引用,对 b 的任何修改都会影响到 a

 引用还可以用于函数参数,可以避免拷贝大型对象,提高代码运行速度,举个最最最简单的例子:

int NumAdd(int& num1,int& num2) 
{
    return num1+num2;
}

 

引用与指针的区别:

1.引用必须在声明时初始化,而指针可以在任何时候初始化。

2.引用一旦绑定到一个变量上就不能改变,而指针可以随时改变所指向的对象。

3.引用不能为空(即不能引用一个无效的内存地址),而指针可以为空。

(五)函数的重载与默认值

1.函数重载及名字粉碎

函数重载是指在同一个作用域内可以定义多个同名函数,但这些函数的参数列表必须不同。参数列表的不同可以是参数的数量、类型或顺序不同。编译器根据调用时提供的参数来选择匹配的函数版本,举个例子:

// 重载函数1:接受两个整数参数
void print(int a, int b) 
{
    cout << "Integers: " << a << ", " << b << endl;
}

// 重载函数2:接受两个浮点数参数
void print(double a, double b) 
{
    cout << "Doubles: " << a << ", " << b << endl;
}

// 重载函数3:接受一个字符串参数
void print(string& str)
{
    cout << "String: " << str << endl;
}

int main()
{
    print(1, 2);          // 调用第一个重载函数
    print(1.1, 2.2);      // 调用第二个重载函数
    print("Hello");       // 调用第三个重载函数
    return 0;
}

 在C++中,之所以能使用重载,就是因为名字粉碎,它是一种编译器优化技术,它通过将函数的参数类型信息编码进函数名中,从而使得每个函数都有一个独特的名称。这种机制允许C++语言支持函数重载和运算符重载,而这些特性在C语言中并没有。

2.默认值

默认参数值允许在函数声明或定义时为某些参数指定默认值。如果调用函数时没有提供这些参数的值,则使用默认值。

(!!!默认参数值只能从右向左依次指定,不能跳过中间的某个参数而只给后面的参数提供默认值!!!)

继续举个例子

void text(int a, int b = 10, int c = 20) 
{
    cout << "a: " << a << "  b: " << b << "  c: " << c << endl;
}

int main() 
{
    text(1);           // 使用默认值 b=10, c=20
    text(1, 2);        // 使用默认值 c=20
    text(1, 2, 3);     // 不使用默认值
    return 0;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值