C++对C的改进(1)
新的初始化方法
int x = 1024;
复制初始化(copy-initialization)
如:int x = 1024;
直接初始化(direct-initialization):
如:int x(1024);
注意:
①初始化不是简单地赋值,初始化指声明变量或对象并且赋初值;赋值指用新值覆盖变量或对象当前值。
②直接初始化语法更灵活且效率更高
③初始化内置类型变量两种初始化几乎没有差别对于类类型的初始化,有时只能采用直接初始化(以后讨论)
④两种初始化的方法可以混用(见下例)
合使用初始化的例子:
#include <iostream>
using namespace std;
int main()
{
double salary = 9999.99, wage(salary + 0.01);
cout<<salary<<" "<<wage<<endl; int interval,month = , day = , year();
cout<<year<<":"<<month<<":"<<day<<":"<<endl;
system("PAUSE");
return ;
}
新的I/O
C语言的输入输出:
C++语言的输入输出:
C++语言的输入输出:先睹为快
#include <iostream>
using namespace std;
int main()
{
int x;
double y;
/*以下语句等价于printf("请输入两个整数(用逗号隔开):");*/
cout << "请输入两个整数(用空格隔开):"; /*以下语句等价于scanf("%d %f", &x, &y);*/
cin >> x >> y; /*以下语句等价于printf("x = %d, y = %f\n", x, y);*/
cout << "x = " << x << ", y = " << y << endl;
system("PAUSE");
return ;
}
C++的输入输出:cin,cout的用法
cout<<表达式1<<表达式2<<表达式n;
cin>>变量1>>变量2>>变量n;
cout<<"x + y ="<< x + y << "." << endl;
cin >> x >> y;
[注意]
①不能用一个<<输出多个数据项
cout<<a,b,c<<endl; /*错误*/
cout<<a<<b<<c<<endl; /*正确*/
②cin/cout可以分成多行来写
cin>>a>>b
>>c;
cout<<a<<b
<<c;
cout的用法举例:
#include <iostream>
using namespace std;
int main()
{
cout << "This is a C++ program! " << endl;
cout << "This is"
<< " a C++"
<< "program!"
<< endl;
system("PAUSE");
return ;
}
cin的用法举例:
int main()
{
char c1, c2;
int a;
float b;
cin >> c1 >> c2 >> a >> b;
cout << "c1 = " << c1 << endl
<< "c2 = " << c2 << endl
<< "a = " <<a << endl
<< "b = " << b << endl;
system("PAUSE");
return ;
}
cout与输出控制字符:
#include <iostream>
#include <iomanip>
using namespace std;
int main()
{
int x = ;
cout << "请输入一个八进制整数(以开始):";
cin >> oct >> x;
cout << "x的十六进制表示为:" << hex << x << endl;
cout << "x的十进制表示为:" << dec << x << endl;
cout << "x的八进制表示为:" << oct << x << endl;
system("PAUSE");
return ;
}
输出控制符:
注意:若用控制符,程序需包含头文件#include<iomanip>
有关类型的区别
有关类型的区别:bool类型
逻辑类型 |
真 |
假 |
|
C |
没提供 |
非0 |
0 |
C++ |
bool |
true |
false |
注意:
1)bool类型的取值只有两种true,false
2)输出时默认输出0或者1
3)用boolalpha可以改变默认的输出方式,noboolalpha可以恢复默认的输出方式
#include <iostream>
using namespace std;
int main()
{
bool bval1 = < ;
bool bval2 = true;
bool bval3 = false;
bool bval4 = ;
bool bval5 = ;
cout << "bval1=" << bval1 << endl;
cout << "boolalpha bval1=" << boolalpha << bval1 << endl;
cout << "noboolalpha bval1=" << noboolalpha << bval1 << endl;
cout << "bval2=" << bval2 << endl;
cout << "bval3=" << bval3 << endl;
cout << "bval4=" << bval4 << endl;
cout << "bval5=" << bval5 << endl;
system("PAUSE");
return ;
}
有关类型的区别:string类
#include <iostream>
#include <string>
using namespace std; int main()
{
string name = "student";
string address = "Hebei... ...";
cout << name << address <<endl;
return ;
}
string对象的定义和初始化:
初始化string对象的方式 |
|
string s1; |
默认构造函数,s1为空串 |
string s2(s1); |
将s2初始化为s1的一个副本 |
string s3("value"); |
用字符串字面值初始化s3 |
String s4(n,'c') |
将s4初始化为字符'c'的n个副本 |
#include <iostream>
#include <string>
using namespace std;
string s0;
int main( )
{
string s1;
//string s2 = "hello world!";
string s2("hello world!");
//string s3 = s2;
string s3(s2);
string s4(, 'r');
cout << "s0=" <<s0 <<endl;
cout << "s1=" <<s1 <<endl;
cout << "s2=" <<s2 <<endl;
cout << "s3=" <<s3 <<endl;
cout << "s4=" <<s4 <<endl;
system("PAUSE");
return ;
}
string对象的读写:用cin、cout读写string对象
注意:
cin忽略开头所有空格、TAB、回车符
不接收含空格的字符串
string的I/O:
#include <iostream>
#include <string>
using namespace std;
int main()
{
string s;
cin >> s; //hello world!
cout << s <<endl; //hello
system("PAUSE");
return ;
}
string读入未知数目的对象:
#include <iostream>
#include <string>
using namespace std;
int main()
{
string word;
while(cin >> word)
cout << word << endl; system("PAUSE");
return ;
}
string对象的读写:用getline读取整行文本(含空格)。
#include <iostream>
#include <string>
using namespace std;
int main()
{
string line;
while(getline(cin, line))
cout << line << endl;
system("PAUSE");
return ;
}
注意:
getline的第一个参数通常为cin, 第二个参数为string对象
从录入数据的下一行读取,可读取 任何字符
getline()以回车作为结束符 (不接受换行符)
getline()不忽略前导回车,若第一 个就是换行符,则置为空串
string的操作 |
|
s.empty() |
若s为空串,则返回true,否则返回false |
s.size() |
返回s中字符的个数 |
s[n] |
返回s中位置为n的字符,位置从0开始 |
s1+s2 |
将两个串连接成新串,返回新生成的串 |
s1 = s2 |
把s1得内容替换为s2的副本 |
v1 == v2 |
判定时候相等,相等返回true,否则返回false |
!= < <= > >= |
保持这些操作惯有的含义,如:s != s2; |
注意:
1、size()的返回类型并非int而是string::size_type类型的值,建议不要把size()的返回值赋值给int变量
string s2 = "hello";
string::size_type count = s2.size();
#include <iostream>
#include <string>
using namespace std; int main()
{
string s1 = "hello";
string s2 = "world";
string s3 = s1 + ",";
string s4 = "hello" + "world "; //error
string s5 = "hello" + s2 + "world" ;
system("PAUSE");
return ;
}
4、string下标操作可用作左值
int main()
{
string str = "student";
cout << str << endl;
for(string::size_type ix = ; ix!=str.size(); ++ix)
str[ix] = 'x';
cout << str << endl; system(" PAUSE ");
return ;
}
有关类型的区别:枚举
C++对枚举的改进:
①在C++中定义枚举变量可以不用enum
enum weekday
{sun, mon, tue, wed, thu, fri, sat};
weekday w; //省略了enum
②无名枚举:不给出枚举类型名和变量,将枚举元素当符号常量用
enum
{min = , max = };
int x = min, arr[max];
... ...
有关类型的区别:union
C++对联合的扩展:
①无名联合:没有联合体类型名和变量名的联合体
#include <iostream>
using namespace std;
int main()
{
union {
char c;
int i;
double d;
};
c = 'a';
cout << c << endl;
return ;
}
②定义联合变量无需给出union
#include <iostream>
using namespace std;
union test
{
char c;
int i;
double d;
};
int main()
{
test m = {'a'};
cout << m.c << endl;
return ;
}
有关类型的区别:struct
C++对结构体的扩展
①定义结构体变量可以不用struct
struct point
{
double x;
int a;
};
point p;
②成员可以包含函数定义
struct point{
double x,y; //数据成员
void setvalue(double a,double b) //成员函数
{
x = a;
y = b;
}
};
C++对C的改进(1)的更多相关文章
- 120项改进:开源超级爬虫Hawk 2.0 重磅发布!
沙漠君在历时半年,修改无数bug,更新一票新功能后,在今天隆重推出最新改进的超级爬虫Hawk 2.0! 啥?你不知道Hawk干吗用的? 这是采集数据的挖掘机,网络猎杀的重狙!半年多以前,沙漠君写了一篇 ...
- 基于改进人工蜂群算法的K均值聚类算法(附MATLAB版源代码)
其实一直以来也没有准备在园子里发这样的文章,相对来说,算法改进放在园子里还是会稍稍显得格格不入.但是最近邮箱收到的几封邮件让我觉得有必要通过我的博客把过去做过的东西分享出去更给更多需要的人.从论文刊登 ...
- 挑子学习笔记:两步聚类算法(TwoStep Cluster Algorithm)——改进的BIRCH算法
转载请标明出处:http://www.cnblogs.com/tiaozistudy/p/twostep_cluster_algorithm.html 两步聚类算法是在SPSS Modeler中使用的 ...
- ITTC数据挖掘平台介绍(四) 框架改进和新功能
本数据挖掘框架在这几个月的时间内,有了进一步的功能增强 一. 超大网络的画布显示虚拟化 如前几节所述,框架采用了三级层次实现,分别是数据,抽象Node和绘图的DataPoint,结构如下: ...
- C# 3.0新语言特性和改进(一)
引言 关于C#3.0的特性,园子里已经有了一大把,可能大家都很熟悉了,虽然本人开发中使用过,但自己还是需要记录一下,总结一下.同时也是后面写Linq知识的基础.希望有兴趣的朋友,可以看看. C# 3. ...
- jqGrid插件getCol方法的一个改进
jgGrid插件是非常常用的一个基于jQuery的表格插件,功能非常强大.我最近也频繁使用.但是这个插件也有一些不够完善的地方.比如这个getCol方法. getCol方法接受三个参数 colname ...
- kaggle入门2——改进特征
1:改进我们的特征 在上一个任务中,我们完成了我们在Kaggle上一个机器学习比赛的第一个比赛提交泰坦尼克号:灾难中的机器学习. 可是我们提交的分数并不是非常高.有三种主要的方法可以让我们能够提高他: ...
- SQL Server 2016中In-Memory OLTP继CTP3之后的新改进
SQL Server 2016中In-Memory OLTP继CTP3之后的新改进 转译自:https://blogs.msdn.microsoft.com/sqlserverstorageengin ...
- Hadoop学习笔记—21.Hadoop2的改进内容简介
Hadoop2相比较于Hadoop1.x来说,HDFS的架构与MapReduce的都有较大的变化,且速度上和可用性上都有了很大的提高,Hadoop2中有两个重要的变更: (1)HDFS的NameNod ...
- Java进击C#——语法之知识点的改进
本章简言 上一章我们讲到关于面向对象思想上C#和JAVA之差别.笔者分别从面向对象的三大特性入手.而本章主要讲一些C#改进的知识点.在.NET Framework 2.0之后出现很多新的知识点.这些知 ...
随机推荐
- Java List转换为字符串的几种方法
Java List转换为字符串的几种方法 import org.apache.commons.lang3.StringUtils; import java.util.ArrayList; import ...
- 长沙理工大学第十二届ACM大赛-重现赛 G - 跑路ing
题目描述 vigoss18 辞职成功终于逃出了公司,但是没过太久,公司就发现vigoss18 的所作所为,于是派人来把他抓 回去. vigoss18 必须一直跑路,躲避公司的围捕.可以抽象的看成一个有 ...
- Trie树入门
Trie树入门 貌似很多人会认为\(Trie\)是字符串类型,但是这是数据结构!!!. 详情见度娘 下面开始进入正题. PS:本文章所有代码未经编译,有错误还请大家指出. 引入 先来看一个问题 给 ...
- TCP/IP——基础概念简记
TCP/IP协议族的分层: 应用层 运输层 网络层 链路层 互联网地址(IP地址):互联网上的每个接口必须有一个唯一的Internet地址,它一定的结构,分为ABCDE五类.A类保留给政府机构,B类分 ...
- Web应用类型扫描识别工具WhatWeb
Web应用类型扫描识别工具WhatWeb WhatWeb是一款Kali Linux预安装的Web扫描工具.它使用Ruby语言编写.该工具可以扫描网站,获取该网站的各类信息,如所使用的CMS.博客平 ...
- [POJ2749]Building roads(2-SAT)
Building roads Time Limit: 2000MS Memory Limit: 65536K Total Submissions: 8153 Accepted: 2772 De ...
- 20162327WJH 实验三 《敏捷开发与XP实践》 实验报告
20162327WJH 实验三 <敏捷开发与XP实践> 实验报告 一.实验内容 1.XP基础 2.XP核心实践 3.相关工具 二.实验要求 1.没有Linux基础的同学建议先学习<L ...
- python爬虫我是斗图之王
python爬虫我是斗图之王 本文会以斗图啦网站为例,爬取所有表情包. 阅读之前需要对线程池.连接池.正则表达式稍作了解. 分析网站 页面url分析 打开斗图啦网站,简单翻阅之后发现最新表情每页包含的 ...
- Java字符串池
1. String类的两个构造方法 private final char value[]; private int hash; public String() { this.value = " ...
- 37.递推:Pell数列
总时间限制: 3000ms 内存限制: 65536kB 描述 Pell数列a1, a2, a3, ...的定义是这样的,a1 = 1, a2 = 2, ... , an = 2 * an − 1 + ...