C++基础知识整理(C增强篇)

1、namespace命名空间

  • using namespace std;当使用时,必须使用;不用

  • 用于解决命名冲突
  • 可以存放变量、函数、结构体、类等
  • 必须声明在全局作用域下
  • 可以嵌套命名空间
  • 开放性,可随时向命名空间中添加新成员,即定义已有的命名空间时,不会冲突,而会将两个合并
  • 命名空间可以匿名、取别名
#include
using namespace std;//c++的命名空间
namespace NameSpaceA
{
	int a = 0;
}
namespace NameSpaceB
{
	int a = 1;

	namespace NameSpaceC
	{
		struct Teacher
		{
			char name[10];
			int age;
		};
	}
}

int main()
{
	using namespace NameSpaceA;
	using NameSpaceB::NameSpaceC::Teacher;

	printf("a = %d\n", a);
	printf("a = %d\n", NameSpaceB::a);

	NameSpaceB::NameSpaceC::Teacher t2;
	Teacher t1 = { "aaa", 3 };

	printf("t1.name = %s\n", t1.name);
	printf("t1.age = %d\n", t1.age);

	system("pause");
	return 0;
}

2、using的使用

  • using声明 using severt::saber; 注意:避免就近原则与using声明同时出现

namespace servant
{
    int saber = 1;
};
void test()
{
    int saber = 0; 
    using servant::saber;
    cout << saber << endl;
}
//error C2874: using 声明导致“servant::saber”的多次声明
  • using编译指令 using namespace servant;

namespace servant
{
	int saber = 1;
};
namespace servant2
{
	int saber = 2;
};
void test()
{
	int saber = 0;    //若注释此行,将提示error C2872: “saber”: 不明确的符号,须使用::作用域解析
	using namespace servant;
	using namespace servant2;
	cout << saber << endl;    // 0
}

3、 C++对C的增强

  • 全局变量检测的增强

int a;
int a = 10;
//C语言可通过  C++不允许
  • 函数检测的增强

int getArea(a,b)
{
    
}
void test()
{
    getArea(10,10,10);    
}
//C语言可通过  C++不允许   返回值、参数类型、参数个数
  •  类型转换检测的增强

void test()
{
    char *p = malloc(64);
}
//C语言可通过  C++不允许   malloc() 返回 void * 须须转换成相应类型
  • struct——C语言不允许struct中定义函数。C++中可用struct定义类,与class定义类的唯一区别是:在不指明访问权限时,struct定义的默认是public,class定义的默认是private

  • bool——C语言中无此类型   1个字节(是1Byte不是1Bit)   true——非0   false——0

#include
#include
using namespace std;//c++的命名空间
int main(int argc, char* argv[])
{
	int a;
	bool b = true;
	printf("b = %d, sizeof(b) = %d\n", b, sizeof(b));

	b = 4;
	a = b;
	printf("a = %d, b = %d\n", a, b);

	b = -4;
	a = b;
	printf("a = %d, b = %d\n", a, b);

	a = 10;
	b = a;
	printf("a = %d, b = %d\n", a, b);

	b = 0;
	printf("b = %d\n", b);
	return 0;
}

 C++基础知识整理(C增强篇)_第1张图片

  • 三目运算符(C语言中返回值(常量),C++中返回变量

void test()
{
	int a = 0, b = 2;
	a > b ? a : b = 10;   //C语言   error C2106: “=”: 左操作数必须为左值
    //   正确  a > b ? (a=10):(b=10);
	printf("%d %d", a, b);
}
void test()
{
	int a = 0, b = 2;
	a > b ? a : b = 10;    //C++正确
	cout << a << b;
}
  • const 的增强 C语言和C++中const的不同之处

#include 
using namespace std;
#define X 3 //宏定义,编译时计算机不检查语法错误
int main()
{
//    int const a=3;  //const int a=3;
//    const int *p=&a;//int const *p=&a;     p可变,*p内容不可变
    int const b=5;
//    int *const q =&b;//q不可变,*q内容可变
//    const int *const q =&b;//q不可变,*q不可变
    int const *p = &b;
//    int const &c=b;   //c不可被赋值,b可被赋值
//    c=1;
//    b=3;
//    a=5;
//    *q=4;
//    p=&b;
//    cout << a << c << *p << endl;
    return 0;
}
  1. const int nValue; //nValue是const 
    const char *pContent; //*pContent是const, pContent可变 
    const (char *) pContent; //pContent是const,*pContent可变 
    char* const pContent; //pContent是const,*pContent可变 
    const char* const pContent; //pContent和*pContent都是const 
    int const nValue; // nValue是const 
    char const * pContent;// *pContent是const, pContent可变 
    (char *) const pContent;//pContent是const, *pContent可变 
    char* const pContent;// pContent是const, *pContent可变 
    char const* const pContent;// pContent和*pContent都是const 

     

你可能感兴趣的:(C/C++,C++)