从C到C++:入门

C plus plus – C语言的超集
C++可以完全引用C

案例:输出Hello World

  • 源代码:HelloWorld.cpp
// 第一个C++程序
#include <iostream>
using namespace std;
int main(){
    cout<< "Hello world" <<endl; 
}
  • 编译:g++ HelloWorld.cpp -o HelloWorld
  • 执行:./HelloWorld
  • 结果:Hello world

麻雀虽小,五脏俱全。

HelloWorld.cpp,看C++与C的基本区别:
0. 单行注释//
1. 文件后缀名.cpp
2. 头文件#include <iostream>
3. 命名空间 using namespace std;
4. 标准输出流cout、输出运算符<<、换行控制器endl
5. 编译工具g++


1. 源文件后缀
  • C/C++头文件后缀名区别
CC++
*.h*.h *.hpp

* C/C++源文件后缀名区别

CC++
*.c*.cpp *.cc *.cxx

* 不同编译器C++源文件后缀名区别

平台可用后缀名
Unix*.C, *.cc, *.cxx, *.c
GNU C++*.C, *.cc, *.cxx, *.cpp, *.c++
Borland C++*.cpp
Microsoft Visual C++*.cpp, *.cxx, *.cc

2.引用头文件

C++头文件使用C标准库,在C标准库文件名前加上字母c,并且省略后缀名.h,例如:

CC++
#include <stdio.h>#include <iosteam> /#include <cstdio>
#include <stdlib.h>#include <cstdlib>
#include <string.h>#include <cstring>
#include <math.h>#include <cmath>

有些C++编译器同时支持以上两种头文件,但有些不。请使用C++标准方式


3. 函数重载

实验: 以下C与C++的编译执行结果
* printf.c

#include <stdio.h>
void printf(){
    printf("Hello world");
}
int main(){
    printf();
}
  • printf.cpp
#include <cstdio>
void printf(){
    printf("Hello world");
}
int main(){
    printf();
}

函数重载:函数名相同只有参数(个数或者类型)不相同。

CC++
不支持重载支持重载

4. 命名空间

实验: 以下C的编译结果
* scope.c

#include <stdio.h>
void test(){
    printf("this is test\n");
}
void test(){
    printf("this is another test\n");
}
int main(){
    test();
}

命名空间

CC++
不支持命名空间支持命名空间

* 命名空间的作用:避免全局变量、函数、类的命名冲突(因为名字相同而编译失败)。

  • 定义命名空间
namespace 空间名 {
}
  • 引用命名空间
using namespace 空间名;
  • 标准命名空间std
using namespace std;

C++命名空间处理方式

#include <cstdio>
namespace scope1 {
    void test(){
        printf("this is test\n");
    }
}
namespace scope2 {
    void test(){
        printf("this is another test\n");
    }
}
int main(){
    scope1::test();
    scope2::test();
}

全局命名空间
* 默认的命名空间,所有名字都在全局命名空间中。
* 使用方式:直接忽略或者只写::
例如:定义全局函数void test();,默认就是在全局命名空间中,调用方式test()或者::test()

在C++中,不带.h后缀的头文件所包含和定义的标识符在std空间中;
.h后缀的头文件所包含和定义的标识符在全局命名空间中,不需要声明使用std空间


5. 类型
  • 新增基本类型booltrue/false
    • password.c
#include <stdio.h>
int main(){
      printf("input user name:");
      char name[BUFSIZ];
      scanf("%s",name);
      printf("input 3 number password:");
      int password1;
      scanf("%d",&password1);
      printf("input 3 number password again:");
      int password2;
      scanf("%d",&password2);
      printf("password check:%d\n", password1 == password2);
}
  • password.cpp
#include <iostream>
using std::cout;
using std::cin;
using std::endl;
int main(){
      cout << "input user name:";
      char name[BUFSIZ];
      cin >> name;
      cout << "input 3 number password:";
      int password1;
      cin >> password1;
      cout << "input 3 number password again:";
      int password2;
      cin >> password2;
      cout << "password check:" << (password1 == password2) << endl;
}
  • 新增自定义类型class
    详细信息参见:类与对象章节

6. 思想
CC++
面向过程面向对象/基于对象

何为面向过程?何为面向对象?
* 面向过程:强调如何处理
* 面向对象:强调执行处理的对象

面向过程与面向对象、厨师与老板

7. 动态内存
  • 基本类型的动态内存
    • dynamic_mem.c
#include <stdio.h>
#include <stdlib.h>
int main(){
      int* num = malloc(sizeof(int));
      *num = 100;
      printf("%d\n",*num);
      free(num); 
}
  • dynamic_mem.cpp
#include <iostream>
int main(){
      int* num = new int;
      *num = 100;
      std::cout << *num << std::endl;
      delete num; 
}

动态内存区别

CC++
malloc()/free()new/delete

C++仍然可以使用malloc()/free(),但是不建议这么做。

问题:
* malloc()申请内存,是否可以使用delete销毁内存?
* new申请内存,是否可以使用free()销毁内存?

扩展阅读

  • 《Accelerated C++》第0~2章
    • 为什么for循环的下标习惯从0开始?
    • 为什么for循环的的判断条件通常使用!=?
  • 《C++程序设计原理与实践》第2章Hello,World!
  • 《C++程序设计原理与实践》第3章 对象、 类型和值

练习

  • 完成上面扩展阅读中的习题和练习。

网站

  • www.cplusplus.com
  • www.cpprefence.com

问题

  1. 命名空间占内存吗?不占。

  2. 命名空间与文件的关系?一个文件可以定义多个命名空间,一个命名空间可以在多个文件中定义。

  3. const关键字作用与#define宏定义区别?

  4. const char * pchar * const pchar const *p区别?

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 《Visual C从入门到精通PDF》是一本经典的教程书籍,适合想要学习和掌握Visual C编程的人群使用。这本书的目标是帮助读者从入门阶段逐步提高,最终达到精通Visual C的程度。 这本书的内容覆盖了Visual C编程的各个方面,包括基本的语法和概念、界面设计、事件处理、图形和图像处理、数据库连接等等。每个主题都有详细的讲解和示例代码,通过实践演示了如何在Visual C中进行各种操作和开发。 最初的几章主要介绍了Visual C的基本概念和环境设置,帮助读者熟悉开发环境并能够创建简单的项目。接下来的章节逐渐引入更多高级的概念和技术,如对象、类、继承和多态等。通过这些内容的学习,读者可以逐步掌握如何利用Visual C进行面向对象的编程。 书中还特别强调了实际项目开发经验和技巧,通过一些实际案例来演示如何应用所学的知识解决具体的问题。这对于读者来说非常有价值,可以帮助他们更好地理解和应用所学的内容。 总的来说,《Visual C从入门到精通PDF》是一本全面而实用的教程书籍,适合想要系统学习和掌握Visual C编程的读者使用。通过阅读和实践,读者可以逐步提高自己的编程能力,并最终达到精通的水平。 ### 回答2: 《Visual C 从入门到精通》是一本全面介绍Visual C的书籍,以帮助读者从初学者逐步掌握Visual C的各方面知识。书中包括了Visual C的基础知识、语法规则、常用函数和库、图形用户界面设计等内容。 在《Visual C 从入门到精通》一书中,作者详细介绍了Visual C编程语言的历史和发展背景,以及其与C++的关系。读者可以了解到Visual C的编程环境和工具,如Visual Studio,以及如何配置和使用它们来进行编程。 书中还详细介绍了Visual C的基础知识,如变量、数据类型、运算符和控制结构等。读者可以学习如何使用这些基础知识来进行简单的程序开发和调试。 此外,《Visual C 从入门到精通》还介绍了Visual C的高级特性和技术。读者可以学习如何使用Visual C的图形库和API来进行图形用户界面设计,如窗口、按钮、菜单等。还可以学习如何使用Visual C来开发网络应用程序、数据库应用程序等。 最后,《Visual C 从入门到精通》还提供了一些实际的例子和项目,以帮助读者巩固所学的知识,并提供了一些实用的编程技巧和经验分享。 总的来说,《Visual C 从入门到精通》是一本适合初学者学习Visual C的入门教材,通过阅读该书,读者可以逐步掌握Visual C的基础知识和高级技能,成为一名熟练的Visual C编程专家。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值