C++基础01-C++对c的增强

所谓namespace,是指标识符的各种可见范围。C++标准程序库中的所 有标识符都被定义于一个名为std的namespace中。

一 :<iostream>和<iostream.h>格式不一样,前者没有后缀,实际上, 在你的编译器include文件夹里面可以看到,二者是两个文件,打开文件就会发现,里面的代码是不一样的。后缀为.h的头文件c++标准已经明确提出不支持了,早些的实现将标准库功能定义在全局空间里,声明在带.h后缀的头文件 里,c++标准为了和C区别开,也为了正确使用命名空间,规定头文件不使用后缀.h。 因此,

1)当使用<iostream.h>时,相当于在c中调用库函数,使用的是全局命名空间,也就是早期的c++实现;

2)当使用<iostream>的时候,该头文件没有定义全局命名空间,必须 使用namespace std;这样才能正确使用cout。

最方便的就是使用using namespace std; 例如: using namespace std;这样命名空间std内定义的所有标识符都有效(曝光)。就好像它们被声明为全局变量一样。那么以上语句可以如下写: cout <<hex << 3.4 << endl;因为标准库非常的庞大,所以程序员在选择的类的名称或函数名时就很有可能和标准库中的某个名字相同。所以为了避免这种情况所造成的名字冲突,就把标准库中的一切都被放在名字空间std中。但这又会带来了一个新问 题。无数原有的C++代码都依赖于使用了多年的伪标准库中的功能,他们都是在全局空间下的。所以就有了<iostream.h> 和<iostream>等等这样的头文件,一个是为了兼容以前的C++代码,一个是为了支持新的标准。命名空间std封装的是标准程序库的名称,标准程序库为了和以前的头文件区别,一般不加".h"

namespace nA{}  不能定义在函数中 只能是全局变量 

//当使用<iostream.h>时,相当于在c中调用库函数,使用的是全局命
     //名空间,也就是早期的c++实现;
//当使用<iostream>的时候,该头文件没有定义全局命名空间,必须
    //使用namespace std;这样才能正确使用cout。

//C++定义变量随用随定义
//C中最好都定义在主函数开始位置

//C++对全部变量的检测增强(不可重复定义)
//C语言中ok

//C++中的struct是⼀个新类型的定义声明
//C语⾔的struct定义了⼀组变量的集合,C编译器并不认为这是⼀种新的类型
   //如若没有typedef必须用struct进行变量声明


//C++中所有的变量和函数都必须有类型
//C语⾔中的默认类型int在C++中是不合法的
//C++更加强调类型,任意的程序元素都必须显示指明类型

//C++在C语⾔的基本类型系统之上增加了bool
//C++中的bool可取的值只有true和false.理论上bool只占⽤⼀个字节
//true代表真值,编译器内部⽤1来表⽰ false代表⾮真值,编译器内部⽤0来表⽰
//bool类型只有true(⾮0)和false(0)两个值
//C++编译器会在赋值时将⾮0值转换为true,0值转换为false


//C语言中的三目运算符返回的是变量值,不能作为左值使用
//C++中的三目运算符可直接返回变量本身,因此可以出现在程序的任何地方,可以作为左值

(a > b ? a : b )= 50;  //正确,C++中的三目运算符可直接返回变量本身,可以作左值
//(a > b ? 10 : 20) = 50; 10和20是自变量,不能修改,没有内存地址

//C++中的const修饰的,是一个真正的常量,而不是C中变量(只读)。在
//const修饰的常量编译期间,就已经确定下来了
//C++中的const常量与宏定义不同
//const常量是由编译器处理的,提供类型检查和作用域检查
//宏定义由预处理器处理,单纯的文本替换


//c 语言中枚举本质就是整型, 枚举变量可以用任意整型赋值。而 c++中枚举
//变量, 只能用被枚举出来的元素初始化。

 c语言.c  文件:

#include<stdio.h>
#if 1
void test01() {int a = 10;printf("%d\n", a);int b = 20;
}
int g_val;  //分配到bss段
int g_val = 10;
void test02() {printf("%d\n", g_val);
}struct student1 {char name[64];int id;
};
typedef struct student2 {char name[64];int id;
};
typedef struct Student3 {char name[64];int id;
}student3;void test03() {struct student1 s1;//student2 s2;  错误student3 s3;
}f() {return 10;
}
void test04() {f();   //ok
}g(int a) {return a;
}
void test05() {  g(10,20,30);//ok
}void test07() {int a = 10;int b = 20;int c = 0;//左值 右值//左值//右值c = a > b ? a : b;printf("%d\n", c);//(a > b ? a : b )= 50;  错误  (a > b ? a : b)返回的是一个具体数值//10=50; 错误*(a > b ? &a : &b) = 50;  //(a > b ? &a : &b) 返回的是a的地址 *a间接操作a的地址printf("a=%d\n", a);printf("a=%p\n", a);}
void test08() {/*const int a;int const a;  //等价,都表示a是一个常量 只读 不可修改 栈区const int   *c;const int*   c;  //等价于(const int)*c;指针存放地址指向的内容不可以修改//指针指向可以修改int* const c;  //等价于int(* const c); 指针指向是int,指针本身是const//指针指向不可以改变,但是指针存放地址指向的内容可以改变const int* const c; //指针指向不可以改变,指针存放地址指向的内容不可以改变*/const int a = 10;  //a虽然用const修饰,但是变量//int array[a] = { 0 }; a是变量,所以报错int *p = &a;*p = 20;printf("%d", a);  //20}enum season {Spring,Summer,Autumn,Winter1,Winter2,Winter3,Winter4,
};
void test09() {enum season s = Winter3;if (s == 5) {printf("%d", s);  //5}s = Winter4;if (s == 64) {printf("%s", s);}
}
int main(void) {/*test01();test02();test03();test04();test05();test06();test07();test08();*/test09();return 0;
}
#endif

c++语言.cpp:

//当使用<iostream.h>时,相当于在c中调用库函数,使用的是全局命//名空间,也就是早期的c++实现;
//当使用<iostream>的时候,该头文件没有定义全局命名空间,必须//使用namespace std;这样才能正确使用cout。//C++定义变量随用随定义
//C中最好都定义在主函数开始位置//C++对全部变量的检测增强(不可重复定义)
//C语言中ok//C++中的struct是⼀个新类型的定义声明
//C语⾔的struct定义了⼀组变量的集合,C编译器并不认为这是⼀种新的类型//如若没有typedef必须用struct进行变量声明//C++中所有的变量和函数都必须有类型
//C语⾔中的默认类型int在C++中是不合法的
//C++更加强调类型,任意的程序元素都必须显示指明类型//C++在C语⾔的基本类型系统之上增加了bool
//C++中的bool可取的值只有true和false.理论上bool只占⽤⼀个字节
//true代表真值,编译器内部⽤1来表⽰ false代表⾮真值,编译器内部⽤0来表⽰
//bool类型只有true(⾮0)和false(0)两个值
//C++编译器会在赋值时将⾮0值转换为true,0值转换为false//C语言中的三目运算符返回的是变量值,不能作为左值使用
//C++中的三目运算符可直接返回变量本身,因此可以出现在程序的任何地方,可以作为左值//C++中的const修饰的,是一个真正的常量,而不是C中变量(只读)。在
//const修饰的常量编译期间,就已经确定下来了
//C++中的const常量与宏定义不同
//const常量是由编译器处理的,提供类型检查和作用域检查
//宏定义由预处理器处理,单纯的文本替换//c 语言中枚举本质就是整型, 枚举变量可以用任意整型赋值。而 c++中枚举
//变量, 只能用被枚举出来的元素初始化。
#if 1
#include<iostream>
using namespace std;
void test01() {int i = 0;for (int i = 0; i < 10; i++){}int b = 20;cout << b << endl;
}
/*  
int g_val;  
int g_val = 10;  重复定义ERROR
void test02()
{cout << g_val << endl;
}
*/struct student
{char name[64];int id;
};void test03() {student s1;
}/*
f() {  //没有返回类型 错误return 10;
}
void test04() {f();//没有返回类型 错误g(10,20);  //报错
}*//*
g(int a) {return a;
}
void test05() {g(10, 20);  //报错  缺少参数
}*/void test06() {bool flag = true;cout << flag << endl;  //1flag = false;cout << flag << endl;  //0flag = 3;cout << flag << endl;  //1flag = -3;cout << flag << endl;  //1cout<<"sizeof(flag):" << sizeof(flag) << endl;
}void test07() {int a = 10;int b = 20;int c = 0;//左值 右值//左值//右值cout << "a=" << a << endl;  //10cout << "b=" << b << endl;  //20c = a > b ? a : b;cout << c << endl;  //20cout << "a=" << a << endl;  //10cout << "b=" << b << endl;  //20(a > b ? a : b )= 50;  //正确,C++中的三目运算符可直接返回变量本身,可以作左值cout <<"a="<< a << endl;    //10cout << "b="<<b << endl;    //50
}void test08() {const int a = 10;  //a是真正的常量int array[a] = { 0 };  //可以通过编译int *p = (int*)&a;  //如果对常量取地址,编译器会临时开辟一个空间temp,指针指向temp*p = 20;  //改变的时临时开辟的temp变量cout << "a=" << a << endl;    //10cout << "*p=" << *p << endl;  //20
}enum season {Spring,Summer,Autumn,Winter1,Winter2,Winter3,Winter4,
};
void test09() {enum season s = Spring;if(s==Spring)cout << s << endl;  //0
}
int main() {//test06();//test07();//test08();test09();
}#endif

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/567907.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

C++基础02-C++对c的拓展

变量名实质上是一段连续存储空间的别名&#xff0c;是一个标号(门牌号) 通过变量来申请并命名内存空间. 通过变量的名字可以使用存储空间. 变量名&#xff0c;本身是一段内存的引用&#xff0c;即别名(alias). 引用可以看作一个已定义变量的别名。 引用的语法&#xff…

php小程序onload,微信小程序 loading 组件实例详解

这篇文章主要介绍了微信小程序 loading 组件实例详解的相关资料,需要的朋友可以参考下loading通常使用在请求网络数据时的一种方式&#xff0c;通过hidden属性设置显示与否主要属性&#xff1a;wxml显示loading正在加载jsPage({data:{// text:"这是一个页面"hiddenLo…

C++基础04-类基础

一、类和对象 面向对象三大特点&#xff1a;封装、继承、多态。 struct 中所有行为和属性都是 public 的(默认)。C中的 class 可以指定行为和属性的访问方式。 封装,可以达到,对内开放数据,对外屏蔽数据,对外提供接口。达到了信息隐蔽的功能。 class 封装的本质,在于将数…

C++基础05-类构造函数与析构函数

总结&#xff1a; 1、类对象的作用域为两个{}之间。在遇到}后开始执行析构函数 2、当没有任何显式的构造函数&#xff08;无参&#xff0c;有参&#xff0c;拷贝构造&#xff09;时&#xff0c;默认构造函数才会发挥作用 一旦提供显式的构造函数&#xff0c;默认构造函数不复…

PHP网站配置项,Thinkphp5通用网站后台配置项的动态添加及更新

一、引入无论平时我们自己制作&#xff0c;还是浏览别人的网站&#xff0c;它都具有其相应的一些共用的、通用的属性&#xff0c;比如&#xff1a;网站的名字&#xff0c;关键字、备案号、分页数量、是否开启缓存等信息。一些网站可能将配置项写死在后台&#xff0c;无法动态更…

oracle 查询cpu 100%,Oracle 11g中查询CPU占有率高的SQL

oracle版本&#xff1a;oracle11g背景&#xff1a;今天在Linux中的oracle服务上&#xff0c;运用top命令发现许多进程的CPU占有率是100%。操作步骤&#xff1a;以进程PID:7851为例执行以下语句&#xff1a;方法一&#xff1a;(1)通过PID&#xff0c;查得相对应的系统进程对应的…

C++基础08-this指针-const修饰成员函数-函数返回引用/值

一、this指针 1、C类对象中的成员变量和成员函数是分开存储的。C语言中的内存四区模型仍然有效&#xff01; 2、C中类的普通成员函数都隐式包含一个指向当前对象的this指针。 3、静态成员函数、成员变量属于类 4、静态成员函数与普通成员函数的区别 静态成员函数不包含指…

C++基础09-货物售卖和MyArray实现

1、货物出货与进货 #if 0 #include<iostream> using namespace std; /* 某商店经销一种货物。货物购进和卖出时以箱为单位。各箱 的重量不一样&#xff0c;因此商店需要记录目前库存的总重量&#xff0c;现在用 C模拟商店货物购进和卖出的情况 */ class Goods { public:…

C++基础11-类和对象之操作符重载1

总结&#xff1a; 1、运算符重载的本质是函数重载 2、运算符重载可分为成员函数重载和全局函数重载(差一个参数) 3、运算符重载函数的参数至少有一个是类对象&#xff08;或类对象的引用&#xff09; 4、不可以被重载的操作符有&#xff1a;成员选择符(.) 成员对象选择符(.*) …

linux照片备份软件,Linux、Unix上5个惊艳开源备份软件

Linux和类Unix系统上5个惊艳的开源备份软件&#xff1a;Bacula、Amanda、Backupninja、Backuppc和UrBackup&#xff0c;这些都是既可以使用在Linux上也可以使用在Unix上面&#xff0c;他们的优点就是性能稳定&#xff0c;使用灵活。一个好的备份计划是非常必要的&#xff0c;这…

linux 添加重定向域名,Linux系统中Nginx的安装并进行域名认证和重定向

Linux系统中Nginx的安装并进行域名认证和重定向本文主要介绍Linux系统中Nginx的安装并进行域名认证和重定向&#xff0c;希望通过本知识点的讲解对大家今后的学习和工作有所帮助&#xff0c;下面进行具体介绍&#xff1a;12.6 Nginx安装cd /usr/local/srcwget http://nginx.org…

linux有读EC RAM的工具吗,Step to UEFI (179)Shell下 EC Ram 读取工具

最近工作需要在 UEFI Shell 下Check EC Ram 的设定&#xff0c;发现手上只有 Windows 下的读取工具(RW Everything)。于是研究了一下如何在Shell 读取 EC Ram。根据【参考1】读取的流程如下&#xff1a;Port 66 CommandsThere are also some EC commands that use ports 0x66 …

C++基础13-类和对象之继承1

在 C中可重用性(software reusability)是通过继承(inheritance)这一机制来实现的。 如果没有掌握继承性,就没有掌握类与对象的精华。 总结&#xff1a; 1、只要是父类中的private成员&#xff0c;不管是什么继承方式&#xff0c;儿子都访问不了&#xff0c;但它是存在在儿子之…

C++基础13-类和对象之继承2

总结&#xff1a; 1、子类对象可以当做父类对象使用 2、子类对象可以直接赋值给父类对象 3、子类对象能够直接初始化父类对象 4、父类指针可以直接指向子类对象 5、凡是继承过来的属性和函数都可以在子类中用this-> 进行访问 6、默认构造函数并不会初始化数据成员 7、如果…

C++基础14-类和对象之多继承与虚继承

多继承&#xff1a;一个类有多个直接基类的继承关系称为多继承 总结&#xff1a; 1、一般将具有菱形样式继承方式的某些类声明为虚继承 3、虚继承的主要目的是为了防止二义性 2、虚继承就是在继承方式前加virtual 如果一个派生类从多个基类派生&#xff0c;而这些基类又有一…

linux系统安装ntp,CentOS下NTP安装配置

安装yum install ntp配置文件 /etc/ntp.confrestrict default kod nomodifynotrap nopeer noqueryrestrict -6 default kod nomodify notrap nopeer noqueryrestrict 127.0.0.1restrict -6 ::1# 用restrict控管权限# nomodify - 用户端不能更改ntp服务器的时间参数# noquery - …

C++基础15-类和对象之多态

总结&#xff1a; 1、在父类中申明虚函数时&#xff0c;一般情况下在子类中也申明&#xff08;便于读代码&#xff09; 一、赋值兼容 赋值兼容规则是指在需要基类对象的任何地方都可以使用公有派生类的对象来替代。 赋值兼容是一种默认行为,不需要任何的显示的转化步骤。 …

傲云浏览器linux,Centos7安装部署zabbix监控软件

目录部署监控服务器部署监控服务器Zabbix ServerWeb页面验证设置部署监控服务器一、安装LNMP环境Zabbix监控管理控制台需要通过Web页面展示出来&#xff0c;并且还需要使用MySQL来存储数据&#xff0c;因此需要先为Zabbix准备基础LNMP环境。1. wget下载官网Nginxwget http://ng…

c语言环境变量的作用,C语言获取系统环境变量

C语言获取系统环境变量可以通过如下代码实现.#include #include char *platform(){//获取系统变量信息char *ret;extern char **environ;char **env environ;//打印系统变量信息/*while(*env){//puts(*env);env;}*/ret getenv("OS"); //for windows_ntif(NULL ! re…

mysql索引创建及使用注意事项

总结&#xff1a; 1、在使用索引时&#xff0c;一般情况下不建议使用like操作。如果使用&#xff0c;则%放在后面。否则不会使用索引。like ‘%abd%’不会使用索引,而like ‘aaa%’可以使用索引.&#xff08;最左缀原则&#xff09; 2、单列索引的使用&#xff1a; 《1》 只…