C++对C的增强

C++在语法上大部分都兼容C,但是会在一些方面对C进行加强。有类型的加强,函数的加强等等。

1.namespace命名空间

标准C++引入了关键字namespace(命名空间/名字空间/名称空间/名域),可以更好地控制标识符的作用域。

C中的命名空间C++中命名空间
在C语言中只有一个全局作用域命名空间将全局作用域分成不同的部分
所有的全局标识符共享同一个作用域全局作用域也叫默认命名空间
标识符之间可能发生冲突不同命名空间中的标识符可以同名而不会发生冲突

C++命名空间使用:
命名空间:using namespace name;
使用命名空间的变量:using name::Variable;

#include<iostream>
using namespace std;

namespace NameA
{
	int a = 10;
}

namespace NameB
{
	int a = 12;
	namespace NameC
	{
		struct Student
		{
			char name[20];
			int age;
		};
	}
}
void main()
{
	
	using namespace NameA;
	cout << "a = " << a << endl;
	cout << "a = " << NameB::a << endl;
	using NameB::NameC::Student;
	NameB::NameC::Student S1;
	S1.age = 123;
	//S1.name = "abc";       (1)
	//strcpy_s(S1.name, "ndwd");      (2)

	//S1 = { "wdw",23 };      (3)
	cout << "age: " << S1.age << endl;
	cout << "name:  " << S1.name << endl;

	cout<<"hello"<<endl;
	system("pause");
}

(1)这样方式是错的,错误类型是不可指定数组类型,不知道为什么…
(2)(3)方式是正确。
当使用的时候,该头文件没有定义全局命名空间,必须使用namespace std;这样才能正确使用cout。若不引入using namespace std ,需要这样做。std::cout。

2.函数检测增强

C++中所有的变量和函数都必须有类型。C语言中的默认类型在C++中是不合法的。

#include<iostream>
using namespace std;

int getValue(a,b)
{
	return 2;
}

int getValue(int a, int b)
{
	return 2;
}

void main()
{
	getValue(2, 45,23);
	cout<<"hello"<<endl;
	system("pause");
}

这段代码在C中编译是能通过的,但是在C++中均不通过。
所以在C++中必须要指定类型。
在C语言中
int f( );表示返回值为int,接受任意参数的函数
int f(void);表示返回值为int的无参函数
在C++中
int f( );和int f(void)具有相同的意义,都表示返回值为int的无参函数

C++更加强调类型,任意的程序元素都必须显示指明类型

3.新增Bool类型

在C++中新增bool类型关键字。

bool flag = true

4.struct类型增强

struct Student{
	char name[20];
	int age;
};

int main()
{
	Student S1;
	s1 = {"name",123};
	return;
}

在C++中这样定义和使用时没有错,但是在C中这样是会报错的。要修改成:

struct Student{
	char name[20];
	int age;
};

int main()
{
	struct Student S1;
	s1 = {"name",123};
	return;
}

C语言的struct定义了一组变量的集合,C编译器并不认为这是一种新的类型
C++中的struct是一个新类型的定义声明 。

5.三目运算符增强

#include<iostream>
using namespace std;

void main()
{
	int a = 10;
	int b = 39;

	((a < b) ? a : b) = 50;

	cout << "a =  " << a << endl;
	cout << "b =  " << b << endl;
	cout<<"hello"<<endl;
	system("pause");
}

这段代码在C++中是可以实现的,但是在C中是错误的。
原因分析:
C语言中的三目运算符返回的是变量值,不能作为左值使用
C++中的三目运算符可直接返回变量本身,因此可以出现在程序的任何地方

三目运算符可能返回的值中如果有一个是常量值,则不能作为左值使用 (a < b ? 1 : b )= 30;
那在C中该如何实现三目运算符为左值呢?

*((a < b)?&a:&b) = 50;

6.const增强

之前也提到过const在C中用法,但是C中的const其实不是真正意义上的const。如:

int main(void)
{
	int const a = 10;
	int *p = NULL;
	p = &a;
	*p = 39;
	return 0;
}

这样就能把a的值修改了,但是放到C++中,仍然不能被修改。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值