(一)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;
}

被折叠的 条评论
为什么被折叠?



