C++对C的改进(1)

新的初始化方法

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-10-24 13:13:06

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

Win8改进一键挂载VHD虚拟磁盘教程

Windows8发布到现在也有一段时间了,不知道又有多少朋友升级到Win8了呢?相信应该有不少吧,Windows8相比于以前的Windows而言的确是有着很多不同凡响的改进的,也确实让我们的用户体验更加的优秀了,在Windows 8发布之前的时候我们就向大家介绍过Windows 8一些非常人性化的改进,比如说支持直接挂载ISO文件,省去了我们安装虚拟光驱软件的麻烦,其实除了可以直接挂在ISO文件之外,在Windows 8中还支持直接双击挂载VHD文件,相比于Windows7而言,这又是一项改进了

FreeBSD 8.4改进了稳定性和存储功能

FreeBSD项目团队宣布发布v8.4版--8-STABLE分支的第五个版本.主要新特性包括:GNOME 2.32.1,KDE 4.10.1:ZFS文件系统支持feature flags和异步破坏.LZ4压缩和ZIO NOP写优化:支持LSI的存储控制器. 新版主要是改进了稳定性和存储功能. 下载:FreeBSD 8.4 查看本栏目更多精彩内容:http://www.bianceng.cnhttp://www.bianceng.cn/OS/FreeBSD/

图形化编程实现改进的欧拉格式和龙格库塔格式。这里有个C语言的,想改写成C#。

问题描述 图形化编程实现改进的欧拉格式和龙格库塔格式.这里有个C语言的,想改写成C#. 1)改进欧拉法求解常微分方程的初值问题 #include float func(float x,float y) { return(y-x); } float euler(float x0,float xn,float y0,int N) { float x,y,yp,yc,h; int i; x=x0; y=y0; h=(xn-x0)/(float)N; for(i=1;i<=N;i++) { yp=y+h

InnoDB中Adaptive hash index存在问题、Percona改进及一个bug

背景   Adaptive hash index  (AHI) 是InnoDB中用于加速索引查找的一个结构.InnoDB本身不支持hash索引,所有的索引检索都走B树查询.AHI可以认为是"索引的索引".当对一个页面的访问次数满足一定条件后,将这个页面的地址存在一个hash表中,下次查询可以直接访问到页面,不需要走B树查询. 问题   天下没有免费的午餐,在加速查询的同时,AHI与其他缓存结构一样,也面临维护的问题.作为一个全局结构,在更新时必然有一个全局锁操作(btr_search_

Winform开发框架之权限管理系统改进经验总结(3)系统登录黑白名单的实现

在一般的权限系统里面,可能经常会看到系统的黑名单或者白名单的拦截功能.在一般权限系统里面 ,常见的黑名单就是禁止用户在某些IP上登录系统,白名单就是允许用户只在某些IP上登录系统.本随 笔主要介绍在我的权限系统里面,如何实现这个黑白名单的功能,以及介绍在其中应用到的IP对比操作 ,IP段判断等操作代码. 1.黑白名单的配置 要完成黑名单的拦截和白名单的放行,我们需要进行名单的配置操作,我们把相关的配置放到列表里 面进行展示,可以添加多个黑名单或者白名单,如下界面所示. 开发框架之权限管理系统改进

ASP.NET中生成Excel遇到的问题及改进方法

先看一下方法(其中略去了一些判断和扩展): 生成Excel老代码 复制代码 代码如下: /// <summary> /// 将一组对象导出成EXCEL /// </summary> /// <typeparam name="T">要导出对象的类型</typeparam> /// <param name="objList">一组对象</param> /// <param name="

ASP.NET4.0新改进和新特性

Visual Studio 2010 Beta 1和.NET Framework Beta 1已经发布有一段时间了,我也早就该写这篇文章了.ASP.NET 4.0改进了许多不同的场景集(set of scenarios),如Webforms ,Dynamic Data以及基于AJAX的Web开发.此外还有许多对支撑ASP.NET的核心运行时环境的改进,比如Caching, Session,还有Request/Response对象. 在这篇文章里,我们将一起检验一下对web form的一些改进.这

利用Spring框架改进J2EE编程

j2ee|编程 摘要 J2EE编程正在变得越来越复杂.J2EE已经发展为一个API.复杂化的编程和配置的复杂网络.为了应对这种复杂性,新的框架和方法不断涌现.这些框架高度依赖于一个称为IoC(Inversion of Control,反向控制)的概念.本文将探讨这种方法的一些特性和优点,因为这种方法与J2EE编程相关,而且可以使J2EE编程变得更轻松. 简介 马克·吐温的一句话常被引用:"--关于我死亡的报道是一种夸张."现在已经出现了很多关于.Net的流言,以及认为J2EE API的

SQL Server性能的改进得益于逻辑数据库设计

索引设计和查询设计方面.反过来说,最大的性能问题常常是由其中这些相同方面中的不足引起的.其实SQL优化的实质就是在结果正确的前提下,用优化器可以识别的语句,充份利用索引,减少表扫描的I/O次数,尽量避免表搜索的发生.其实SQL的性能优化是一个复杂的过程,以上这些只是在应用层次的一种体现,深入研究还会涉及数据库层的资源配置.网络层的流量控制以及操作系统层的总体设计. SQL语句优化的原则: ◆1.使用索引来更快地遍历表 缺省情况下建立的索引是非群集索引,但有时它并不是最佳的.在非群集索引下,数据在

改进ASP应用程序中的字符串处理性能

程序|性能|字符串 摘要:大多数 Active Server Pages (ASP) 应用程序都要通过字符串连接来创建呈现给用户的 HTML 格式的数据.本文对几种创建此 HTML 数据流的方法进行了比较,在特定情况下,某些方法在性能方面要优于其他方法.本文假定您已经具备一定的 ASP 和 Visual Basic 编程方面的知识. 简介 编写 ASP 页面时,开发人员实际上是创建一个格式化的文本流,通过 ASP 提供的 Response 对象写入 Web 客户端.创建此文本流的方法有多种,而您