ca88手机版登录网页0一从c到c++

c++的向上历史 

+ 80时期Bell实验室 本贾尼
+ 八3年 正式定名c++
+ 87年 gnu制定了c++标准
+ 九二年 微软和IBM分别制定了c++标准
+ 玖八年 ansi ISO 制定了专业 c++玖八 
+ 03 ISO c++03 
+ 11 ISO c++11 c++0x

编写翻译时注意:gcc ***.c -std=c99

C++_基础_C与C++的区别,基础_c区别

 

内容:
(一)C++简介和编制程序的核心变动
(二)命名空间的概念和使用
(三)结构体、联合、枚举的不及
(4)布尔类型 以及 运算符小名
(5)函数的重载、缺省参数、哑元以 及内联

壹.简介和编制程序的为主转移
一.壹 C语言的简介
一九柒零年,使用汇编语言编写操作系统,汤普逊 发明了一门语言
B语言,Denis-Richie 在B语言的根底上 New B语言,后来改名称叫C语言
C语言 出生于 1972年

1.2 C++语言的简介
在C语言的根底上,本贾尼-斯特劳斯特卢普(Bjarne
Stroustrup)做了必然的扩充,起名 New C语言,后来更名叫“C with
Classes(带类的C)”,想到了C语言中的运算符 ++, 最终改名叫C++,于1九8三年出生

一.3 相关的历史事件
(一)19八3年, C++语言诞生
(二)1985年,CFront一.0 第二个C++编写翻译器诞生
(3)1987年,GNU C++编译器
(4)1990年,Borland C++
(5)1992年,Microsoft C++
(陆)一玖九玖年,第一个ISO C++标准诞生
(vc6.0 1998年诞生)
(柒)200三年,ISO对C++标准做了改动,C++0三标准
(8)2011年,最新的C++标准,C++11或者C++0x
(部分编写翻译器帮忙)

1.四 C++和C语言的比较
(一)C++和C语言都是编写翻译型语言,相当于唯有编译之后才能运作的,有些是不供给编写翻译就能够向来运营的,是经过解释器执行的,那种语言叫脚本语言
vi xxx.sh date;cal;ls -l;
(2)C++和C语言都以强类型语言,全体的标志符都必须有数据类型
a; a = 10; //error
(3)C++对C语言提供包容,并且做了优化提供了越来越多的天性
a.语言风格越来越简洁
b.类型检查尤其严刻
// error
int* pi = malloc(sizeof(int));
c.支持面向对象编制程序
d.支持运算符重载
1+1 = 2
一个人 + 10
e.援助尤其处理
f.援助泛型编制程序
double float …

1.伍 C++的主要用途
(一)用于游戏开发
(贰)用于系统和驱动开发

C++ 未有C语言特别底层,也未曾JAVA/C#越来越偏向应用级
网址技术:javaWeb/.net/PHP

编纂第贰个C++程序

一.6 编制程序的主导扭转
(一)文件的扩大名产生变化
C语言中源文件: xxx.c
C++中源文件:.C/.cc/.cxx/.cpp(plus plus)

C语言中头文件: xxx.h
C++中头文件: xxx.hpp / xxx.h

(二)头文件的扭转
C语言中: #include <stdio.h>
C++中: #include <iostream>

运用C语言中头文件:
#include <cstdio> 去掉.h,前面加c
vi /usr/include/c++/四.6/cstdio文件中涵盖的也许 stdio.h文件

(三)输入输出的变动
C语言中:scanf/printf 函数
C++中:cin/cout 对象

(四)编写翻译器的浮动
C语言中:gcc/cc xxx.c
C++中: g++/c++ xxx.cpp
gcc/cc xxx.cpp -lstdc++

g++/c++ 的编写翻译选项和 gcc/cc一样
-c 只编写翻译不一连
-S 生成汇编文件
-o 钦命输出文件名
-O 优化

(五)命名空间
using namespace std;
选用标准命名空间,标准库中类以及函数等全方位身处std的命名空间中

二.命名空中的上学和平运动用
引进了命名空间(namespace)的概念,主要用来区分同名的函数、变量等

二.一 自定义命名空间
namespace 命名空间名字
{
变量、函数等
}

注意:
和结构体的格式非凡相似,不过主要字不一致,并且未有分号,用于成效域的限量,并不是壹种独立的数据类型

:n1,n二 > 表示将n壹行到n二行之间的代码向右缩进
:n一,n二 < 表示将n1行到n二行之间的代码向左缩进

二.二 使用名字空间的章程
(1)使用名字空间指令的不二等秘书诀接纳命名空间
如:
using namespace std;

(二)使用效果域限定符
:: – 功用域限定符,约等于”的”
如:
std::cout << “我们好才是真的 好”;

(三)使用名字空间注明的不二诀要去行使名字空间中的部分情节
如:
using std::cout;
using std::endl;
cout << “大家好才是确实好” << endl;

二.三 无名名字空间
尽管2个标志符未有被放到别的名字空间中,则暗中认可为无名/匿名名字空间中,能够动用如下格局去做客标志符:

::无名名字空间成员名

2.4 扩展
(一)同叁个命名空间中的内容能够分离写
(二)命名空间中的函数评释和概念也能够分别,也正是函数的定义能够放在命名空间的外围
(叁)命名空间能够拓展嵌套

三.结构体、联合、枚举的不等
3.一 结构体中的区别
C语言中:
struct Student/*组织体类型名 */{ … };
struct Student/*左边全部作为壹 个完整的数据类型*/ s;

typedef struct Student
{ ….}Student/*别名*/;

typedef struct
{….}Student/*别名*/;

C++中:
struct Student{…};
[struct] Student s;

(壹)C++中的结构体定义变量时能够大致struct关键字
(二)C++中的结构体内部能够定义函数,并且函数内使用成员变量时不供给.
->之类的

注意:
(1)在C语言中只要2个函数的形参表为空时,表示能够承受任意四个随机档次的实参
(贰)在C++中只要2个函数的形参表中为空时,表示不接受任何实参

思考:
缘何s和s2调用的是同3个show函数而打字与印刷出来的数额内容却不雷同??
(现在讲到)

叁.二 联合的区别之处
(一)定义联合变量的时候能够省略union关键字
(二)协助匿名联合

如:
union un/*un是一同项目名*/{..};
[union] un u;

union{…}; 匿名联合

三.三 枚举的不相同之处
(1)枚举类型在概念变量时也足以省略enum关键字
(2)C语言的枚举 本质上正是整型,能够应用整数举行赋值
C++中的枚举 是一种独立的数据类型,不可能利用整数举办赋值
(int类型的值域 比 枚举类型的大)

四.布尔项目以及运算符的别称
肆.壹 布尔类型
C语言中:
bool #include<stdbool.h>
int

C++中:
bool类型是C++中的基本数据类型,bool类型的值有四个:true 和
false,其本质上正是 一 和 0
bool类型本质上正是一个单字节整数,任何基本数据类型都得以被隐式地更换为bool类型

小结:
bool类型定义变量,能够视作函数的参数和重临值类型,当然也能够定义指针类型

4.二 运算符小名
&& & | ||
^ 异或运算符 分裂为真,相同为假
作业:
询问手册string类型中的各个函数,尝试着去选用string类型中的各样函数
如:
string s;
s.c_str();

 

 

http://www.bkjia.com/cjjc/1059921.htmlwww.bkjia.comtruehttp://www.bkjia.com/cjjc/1059921.htmlTechArticleC++\_基础\_C与C++的区别,基础\_c区别 内容:
(壹)C++简介和编制程序的为主变化 (2)命名空间的概念和采取(3)结构体、联合、枚举的例外 (四)布尔类型…

c与c++的关系 

  • c++包括了全部c,c是起家c++的根底
  • c++是强类型的语言,对品种检查尤其的严格
  • c++扩展了c:
    • c++提供了面向对象的编制程序机制
    • 运算符重载
    • 十三分处理机制
    • 泛型 模板(STL)

第一个c++程序 

#include <iostream>
using namespace std;


int main()
{
    cout << "hello world!" << endl;

    return 0;

}

 头文件 

标准c++头文件不带.h结尾,头文件在/usr/include/c++/4.6/,能够使用c的头文件
正式c头文件建议去尾加头的不2法门去采纳,例如:

#include<stdio.h> --------> #include<cstdio>
#include<string.h> -------> #include<cstring>

非标准化准c头文件 该怎么用就怎么用,如:

#include<pthread.h>

 源文件 

源文件建议用.cpp后缀名,也得以是.cc .cxx .c++等

 编译器 

应用g++编写翻译器,要是应用gcc要求加3个链接库 -lstdc++
g++的编写翻译选项和gcc相同:

        -c   编译
        -o   输出名
        -On  优化
        -S   生成汇编
        -E   预处理
        -I   指定头文件的位置
        -L   指定库的位置
        -l   指定库名
        -std 指定编译标准
        -g   生成调试信息

 命名空间 

一、便是把1组逻辑上相关的数据协会到联合的逻辑名

  • 方便人民群众模块化
  • 提防命名争持

2、语法

namespace 空间名
{
    //数据
    int age;
    void fun(){}
}

三、如何选拔命名空间
+ 在数码前加 命名空间:: 即可
+ 使用using 声明
    using 空间名::数据名;
+ 使用using namespace 指令
    using namespace 空间名

ca88手机版登录网页,例子:

#include <iostream>
using namespace std;

namespace IBM
{
    int age = 60;
    double salary = 5555;
    void show();
}
namespace IBM
{
    void show()
    {
        cout << "the age of IBM is " << age << ",the salary is "<< salary
        << endl;
    }
}

namespace NJUST
{
    int age = 50;
    double salary = 4444;
    void show()
    {
        cout << "the age of NJUST is " << age << ",the salary is " << salary << endl;
    }
}
// using namespace IBM;
using IBM::show;  // 易错
int main()
{
    show();
    NJUST::show();
    return 0;
}

四、无名命名空间
即使1个数额尚未概念在别的命名空间,则那个数额属于无名命名空间

namespace {
            // 防止跨文件访问
            int age = 23;
    }
    ::数据;

例子:

#include<iostream>
using namespace std;

int a = 100;
namespace 
{
    int b = 123;
}

int main()
{
    cout << a <<endl;
    cout << b <<endl;

    cout << ::a <<endl;
    cout << ::b <<endl;
    return 0;
}

5、命名空间嵌套

#include<iostream>
using namespace std;

namespace ns1
{
    int a = 1;
    namespace ns2
    {
        int a = 2;
        void show()
        {
            cout << a <<endl;
        }
        namespace ns3
        {
            int a = 3;
            void show()
            {
                cout << "this is ns3!" <<endl;
            }
        }
    }
}

namespace ns4 = ns1::ns2::ns3;
int main()
{
    ns1::ns2::show();
    // ns1::ns2::ns3::show();
    ns4::show();
    return 0;
}

c++中的结构 联合 枚举

1、结构体
结构体的概念和c中的完全相同
c++ 中选用结构体做为类型时 能够省略关键字 struct
c++ 中的结构体中 是足以定义函数的

结构体例子

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

/* 定义一个结构体表达 日期 */
struct Date
{
    /* 成员变量 */
    int year;
    int month;
    int day;
    /* 成员函数 */
    void show()
    {
        printf("%04d-%02d-%02d\n",year,month,day);
    }
};

/* 设计一个函数 可以表现 一个日期变量的数据 */
void show_date(Date date)
{
    printf("%04d-%02d-%02d\n",date.year,date.month,date.day);  
}

int main()
{
    Date date = {2016,2,4};
    show_date(date);
    date.year = 2020;
    show_date(date);
    date.show();
    return 0;
}

2、联合体
联合体的概念和 c中的完全相同
c++ 表明联合那个类型时 能够省略 union
c++ 中帮忙匿名联合

联合体的例证

#include<iostream>
using namespace std;

int main()
{

    union 
    {
        char data[4];
        int x;
    };
    /* '0'----> 48 'A'--->65  'a'---->97*/
    x = 0x31323334;
    // x = 41424344;    D C B A
    //小端存储
    for(int i =0;i<4;i++)
        cout << data[i] <<" ";
    // 4 3 2 1
    return 0;
}

注:用这么些顺序可以查阅大端字节恐怕小端字节序。

三、枚举类型
c++表明枚举类型时 能够不难关键字 enum
能够把枚举赋值给整数 整数不得以赋值给枚举变量
(c++不允许,那里反映了c++对品种检查的严加)

枚举的例证:

#include<iostream>
using namespace std;

enum Direction
{
    D_UP = 3,D_DOWN,D_LEFT,D_RIGHT
};


int main()
{
    Direction dire = D_LEFT;
    int x = dire;
    cout << x << endl;
    // dire = 2; // 不能把整数赋值给枚举类型的变量
    // dire = (Direction)2;

    return 0;
}

c++中的布尔类型 bool

取值 有 false true
c语言中须要导入二个头文件 #include

概念一个变量 除了上面包车型大巴多个值之外 结果都以确实
0 ‘\0’ NULL false
神迹用bool 类型 表明整数 真就是1 假便是0

c++ 中的函数

c++中的函数的参数列表严俊相称 无参代表未有其余参数 void仍旧得以用
int foo(void){}// c++ 能够去掉void
c++ 中不再支持函数的隐式申明 调用函数必须超前证明或许定义
函数的回到值类型 不能够省略 main 函数除了

函数重载

一 在同样功效域中 函数名相同 参数列表差异的函数
构成重载(overload)关系
参数列表差别:参数的个数 类型 顺序
2 举例
动用函数指针 调用重载的函数

#include<iostream>
using namespace std;

int add (int x,int y )
{
    cout << "add(int ,int )"<<endl;
    return x + y;
}

double add(int x,double y)
{
    cout << "add(int ,double )" << endl;
    return x + y;
}

int main()
{
    int x = 3;
    double y  = 4.0;
    add(x, y);
    int (*p) (int ,int );
    p = add;
    p(2,3);
    return 0;
}

3 函数重载的原理
c编写翻译器生成函数调用名时 只考虑函数名
c++编写翻译器生成函数名时 不但考虑函数名 而且思量参数列表
4 解决跨编写翻译器调用的题目
extern “C” int getmax(int x,int y);

例子:
func.c

#include<stdio.h>

int getmax(int x,int y)
{
    printf("getmax is c function!\n");

    return x>y?x:y;
}

extern.cpp

#include<iostream>
using namespace std;

// 告诉g++ 编译器 按照C语言编译器生成调用函数名

extern "C" int getmax(int x,int y);
// 分别用gcc 编译func,g++编译extern.c
// gcc -c func.c
// g++ -c extern.c
// g++ func.o exten.o
// ./a.out

int main()
{
    // _Z6getmaxii
    getmax(20,30);

    return 0;
}

内联函数

一 能够把函数的二进制代码直接复制到调用地点
这么减弱了开栈和清理栈的付出
二 怎么样兑现

        #define GETMAX(X,Y) ((X)>(Y)?(X):(Y))

inline int getmax(int x,int y)
{
    return x>y ?x:y;
}

3
小函数 频率调用 适合内联
大函数 稀少调用 不吻合内联
递归函数 无法内联
inline 只是1种请求 请求成功就依据内联调用 请求不成事 就根据普通函数调用

参数哑元

1 若是贰个参数唯有类型 未有参数名 则叫哑元
2 作用
让参数列表相配越发严谨
保险函数的迈入包容
void encode(int pkey);
void decode(int skey);
void decode(int ); // 新函数
有别于函数
++ 默认前++;
operator++();
operator++(int);

参数的暗中同意值

一要是一个函数的参数设定了私下认可值,则调用那几个函数时,那个参数能够不传值,尽管对那些参数字传送入值,则传出的值会改变为那一个值
2 语法

        // void foo(int a = 1,int b,int c = 0); // error

参数的暗中认可值必须靠右
函数表明和贯彻分开时 暗许值在宣称时钦命

举例:

    /*  设计一个函数 打印一个整数数组 默认打印整数数组的前5个数据 分割符号默认使用逗号 */
#include<iostream>

using namespace std;

void print_array(int* a,int n = 5,char c = ',')
{
    for(int i=0;i<n;i++)
    {
        if(i == (n-1))
            cout << a[i]<<endl;
        else
        {
            cout << a[i] << c ;
        }
    }

}
int main()
{
    int a[] = {34,23,55,321,54,67,34,45};
    print_array(a);

    return 0;
}

c++中的动态内部存款和储蓄器分配

    new delete
    类型 *指针名 = new 类型;
    int *p = new int ;
    int *p2 = new int(100);

    申请多个对象的空间
    new[]     delete[]
    类型 *p = new 类型[n] 申请n个
    定位内存分配
    int *p = new(data)int[23];

c++中的类型转换运算符

    static_cast<类型>(变量)
        在某一个方向上 可以做隐式类型转换
        int* pi;
        void* pv = pi;
    dynamic_cast<类型>(变量)
        适合具有多态性的父子类之间
    const_cast<类型>(变量)
        用来去掉const修饰
    reinterpret_cast<类型>(变量)
        重新解释内存 最接近C语言的强制类型转换
        整数变指针
        指针变整数

c++之父给c程序员的提议

    1、尽量少使用宏 const enum(定义常量) 
    2、用inline代替带参的宏
    3、用namespace 避免命名冲突
    4、变量随时用随时定义 以保证变量的初始化
    5、尽量避免使用强制类型转换 如果要进行强制类型转换 尽量使用
    6、多用new delete 少使用malloc free 
    7、少使用c 风格字符串 多使用string 类型;
    8、逐渐建立面向对象的编程思想

相关文章

You can leave a response, or trackback from your own site.

Leave a Reply

网站地图xml地图