C++对C的改进(1)

本文地址:http://www.cnblogs.com/archimedes/p/cpp-change1.html,转载请注明源地址

新的初始化方法

C提供的初始化方法

int x = 1024;

C++提供两种初始化方法:

复制初始化(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 = 8, day = 7, year(2008);
    cout<<year<<":"<<month<<":"<<day<<":"<<endl;
    system("PAUSE");
    return 0;
}

新的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 0;
}

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 0;
}

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 0;
 }

cout与输出控制字符:

#include <iostream>
#include <iomanip>
using namespace std;
int main()
{
    int x = 0;
    cout << "请输入一个八进制整数(以开始):";       cin >> oct >> x;
    cout << "x的十六进制表示为:" << hex << x << endl;
    cout << "x的十进制表示为:" << dec << x << endl;
    cout << "x的八进制表示为:" << oct << x << endl;
    system("PAUSE");
    return 0;
}

输出控制符:

注意:若用控制符,程序需包含头文件#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 = 1 < 2;
    bool bval2 = true;
    bool bval3 = false;
    bool bval4 = 4;
    bool bval5 = 0;
    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 0;
}

有关类型的区别:string类

#include <iostream>
#include <string>
using namespace std;

int main()
{
    string name = "student";
    string address = "Hebei... ...";
    cout << name << address <<endl;
    return 0;
}

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(5, ‘r‘);
    cout << "s0=" <<s0 <<endl;
    cout << "s1=" <<s1 <<endl;
    cout << "s2=" <<s2 <<endl;
    cout << "s3=" <<s3 <<endl;
    cout << "s4=" <<s4 <<endl;
    system("PAUSE");
    return 0;
}

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 0;
}

string读入未知数目的对象:

#include <iostream>
#include <string>
using namespace std;
int main()
{
    string word;
    while(cin >> word)
        cout << word << endl;

    system("PAUSE");
    return 0;
}

string对象的读写:用getline读取整行文本(含空格)。

#include <iostream>
#include <string>
using namespace std;
int main()
{
    string line;
    while(getline(cin, line))
        cout << line << endl;
     system("PAUSE");
     return 0;
}

注意:

getline的第一个参数通常为cin, 第二个参数为string对象

从录入数据的下一行读取,可读取  任何字符

getline()以回车作为结束符 (不接受换行符)

getline()不忽略前导回车,若第一 个就是换行符,则置为空串

string对象的操作,设有:string s, s1;


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

2、两个string对象+时,+操作符左右操作数必须至少有一个是string

#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 0;
}

3、string对象下标操作时,任何无符号整型值均可用作下标,但下标的实际类型为string::size_type

4、string下标操作可用作左值

int main()
{
    string str = "student";
    cout << str << endl;
    for(string::size_type ix = 0; ix!=str.size(); ++ix)
             str[ix] = ‘x‘;
    cout << str << endl;

    system(" PAUSE ");
    return 0;
}

有关类型的区别:枚举

C++对枚举的改进:

①在C++中定义枚举变量可以不用enum

enum  weekday
{sun, mon, tue, wed, thu, fri, sat};
weekday  w;            //省略了enum

②无名枚举:不给出枚举类型名和变量,将枚举元素当符号常量用

enum
{min = 0, max = 100};
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 0;
}

②定义联合变量无需给出union

#include <iostream>
using namespace std;
union test
{
    char c;
    int i;
    double d;
};
int main()
{
    test m = {‘a‘};
    cout << m.c << endl;
    return 0;
}

有关类型的区别: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;
     }
};
时间: 2024-11-10 13:49:05

C++对C的改进(1)的相关文章

基于HBase的时间序列数据库(改进)

基本知识: 期望:1.利用高效的行.列键组织数据存储方式和使用平滑的数据持久策略缓解集群压力 2.利用zookeeper保障数据一致性(选举Leader) 提高性能的技术:数据压缩.索引技术.实体化视图 zookeeper 监控HRegionServer,保存Root Region实际地址,HMaster物理地址,减轻分布式应用从头开发协作服务的负担 HMaster管理HRegionServer负载均衡 日志根据Hadoop的SequenceFile存储 HBase主要处理实际数据文件和日志文件

结对项目改进(林莉 + 宫丽君)

1.产生随机的四位数,如果出现0则把0赋值为1 1 int rightNum = 0; //正确题数 2 int wrongNum = 0; //错误题数 3 Scanner scan = new Scanner(System.in); 4 for(int i =1;i<=10;i++) { 5 System.out.println("第"+ i +"题"); 6 int num1 = (int )(Math.random()*10); 7 int num2

ASP.NET MVC轻教程 Step By Step 6——改进表单

上一节我们使用原始的HTML表单来完成留言功能,但是ASP.NET MVC提供了丰富的HTML辅助方法来帮助我们构建更简洁优雅的表单. Step 1. 修改Form标签 首先,我们可以使用Html.BeginForm来创建form标签.这样我们可以将原来的表单改成如下代码. @{Html.BeginForm("Save", "Home"); } <label for="nickname">昵称</label> <in

20150218【改进】IMX257实现GPIO-IRQ中断按键获取键值驱动程序

[改进]IMX257实现GPIO-IRQ中断按键获取键值驱动程序 2015-02-18 李海沿 一.使用struct pin_desc 管理按键的值 1.定义结构体 2.将前面我们申请中断时写的(void *)1修改为 &pins_desc[n] 在ioctl中,设置中断中修改 在key_release中释放中修改 3.在中断程序中利用我们定义的struc pins_desc判断并得到按键的值 4.得到按键键值后,唤醒程序,在read函数中返回键值 附上驱动源程序: 1 /***********

20150218【改进信号量】IMX257实现GPIO-IRQ中断按键获取键值驱动程序

[改进信号量]IMX257实现GPIO-IRQ中断按键获取键值驱动程序 2015-02-18 李海沿 前面我们使用POLL查询方式来实现GPIO-IRQ按键中断程序 这里我们来使用信号量,让我们的驱动同时只能有一个应用程序打开. 一.首先在前面代码的基础上来一个简单的信号 1.定义一个全局的整形变量 2.在打开函数中,每次进入打开函数canopen都自减1, 3.当我们不使用时,在realease 中canopen自加1 4.这样就实现了一个简单的信号量,我们编译,测试 当我们使用两个应用程序来

20150218【改进Poll定时查询】IMX257实现GPIO-IRQ中断按键获取键值驱动程序

[改进Poll定时查询]IMX257实现GPIO-IRQ中断按键获取键值驱动程序 2015-02-18 李海沿 按键驱动程序中,如果不使用read函数中使程序休眠的,而是还是使用查询方式的话,可以使用Poll函数,来控制一定时间内,如果有按键发生,则立即返回键值. 同时,poll也可以同时监控多个(比如说按键,鼠标,等)一旦发生事件则立即返回. 我们在linux查看帮助: 从帮助中的说明得知, poll, ppoll - wait for some event on a file descrip

愚工钻孔机如何做到世界第一:227版本超多改进(2)

接上文<愚工钻孔机如何做到世界第一:不断改进篇 自动镜像(1)>:ref://6040 1.不连清洗机的钻孔机,防止掉落玻璃 如果不链接清洗机,工人忘记在下片区忘记把玻璃抬下来,结果机器一运行,导致玻璃从出片段砸下.227版本后,可加装一个行程开关,如上图所示:红色圆圈部分为行程开关,建议伸出长度可调,这样方便遇到大玻璃可以打孔. 注意点: 1).从电控箱链接3D-到行程开关的1#端子,2#端子连接线到1#PLC(AFPX-38AT)的X17 2).软件进行设置:手动->系统设置->

CNN卷积神经网络的改进(15年最新paper)

回归正题,今天要跟大家分享的是一些 Convolutional Neural Networks(CNN)的工作. 大家都知道,CNN 最早提出时,是以一定的人眼生理结构为基础,然后逐渐定下来了一些经典的架构--convolutional 和 pooling 的交替,最后再加上几个 fully-connected layers 用作最后做 prediction 等的输出.然而,假设我们能"反思"经典,深入剖析这些经典架构中的不同 component 的作用.甚至去改进它们,有时候可能有许

数据结构之--冒泡排序算法及改进

冒泡排序,是我们学习数据结构第一个排序算法,也是一种最常见和简单的排序算法. 排序原理: 我们把一个数组从左到右依次两两元素比较,比较完成一趟后,能确定最大(最小)值,放在最右边(最左边): 剩下的元素重复上述步骤,直到整个数组有序. 该算法时间复杂度一般为n2  . java实现代码如下: public class BubbleSort { public static void swap(int[] array, int a, int b) { array[a] = array[a] ^ ar

软件工程过程 第7章 软件工程过程改进

1.软件工程过程评估模型描述了作为有效过程特征的元素的结构化集合.这些评估模型提供了:P201 过程改进的出发点 业界过去经营的结晶 共同的语言和共享的构想 活动优先次序的框架 2.基于软件工程过程评估模型进行过程改进可以帮助组织或个人建立过程改进的目标和优先次序,协助改进过程,并为确保建立一个稳定.有能力的以及成熟的过程提供指南.P202 ISO 9001 CMM/CMMI ISO/IEC 15504 (SPICE) 3.软件质量管理体系由三部分要素构成:软件质量管理体系的框架.生存期基本活动