C++从零开始——

####   什么是C++   ####

                                  ————C语言的超集

      C++是C语言的继承,它既可以进行C语言的过程化程序设计,又可以进行以抽象数据类型为>特点的基于对象的程序设计,还可以进行以继承和多态为特点的面向对象的程序设计。C++擅长面向对象程序设计的同时,还可以进行基于过程的程序设计,因而C++就适应的问题规模而论,大小由之。C++不仅拥有计算机高效运行的实用性特征,同时还致力于提高大规模程序的编程质量与程序设计语言的问题描述能力。

####   第一个C++程序   ####

源代码:HelloWorld.cpp

#include <iostream> //输入输出流 cout endl

//using namespace std;

int main()
{
        //cout << "HelloWorld!!!" << endl;
        std::cout << "HelloWorld" << std::endl;
//std:命名空间
//:::名字限定符
//cout:标准输出流(对象),根本实质是一块内存
//<< 或者 >> :操作符
//"HelloWorld!!!":字符串
//endl:换行控制器,作用是输出一个回车换行,和C语言中\n(基于Linux)作用一样
        return 0;//0表示成功,其他表示错误,不同返回值代表不同错误码
}

/*
        在Linux终端执行过程和C语言基本一致,不过此时使用g++工具。
        1,编译:g++ HelloWorld.cpp -o HelloWorld
        2,执行: ./HelloWorld
        3,结果输出: HelloWorld!!!
*/
/*
        从上述源代码看C++和C的区别:
        1,文件后缀名:.cpp
        2,头文件:#include <iostream>
        3,命名空间:using namespace std;
        4,标准输出流:cout;输出运算符:<<;换行控制器:endl
        5,编译工具:g++
*/



####   函数重载   ####

实验 :分别实现以下C和C++代码,分析总结

源代码:printf.c    (C代码)

#include <stdio.h>

void printf()
{
        printf("Hello C \n");
}
int main()
{
        printf();
}
//error: conflicting types for ‘printf’
//编译时会报错;使用标示符命名自定义函数时,C语言要求不能冲突

源代码:printf.cpp    (C++代码)

#include <cstdio>
//#include <iostream> 此处不可以使用,因为下面代码没有使用cout endl

void printf()
{
        printf("Hello C++ \n");
}
int main()
{
        printf();
        return 0;
}

//函数重载:函数名相同只有参数(个数或者类型)不同
//注意:C语言不支持重载;C++支持重载

####   命名空间   ####

实验:分别实验以下C和C++代码,分析总结

源代码:scope.c

#include <stdio.h>

void test()
{
        printf("thie is test \n");
}
void test()
{
        printf("this is another test \n");
}

int main()
{
        test();
}
//error: redefinition of ‘test’
//此处定义两个test函数,在调用时,C语言无法识别调用哪个,报错:重复定义
源代码:scope.cpp

#include <cstdio>

namespace fsx1{
void test(){
        printf("this is test \n");
}
}
namespace fsx2{
void test(){
        printf("this is another test \n");
}
}

int main(){
        fsx1::test();
        fsx2::test();
        return 0;
}
//C语言不支持命名空间,C++支持命名空间
//定义命名空间:namespace 空间名{}
//引用命名空间:using namespace 空间名;
全局命名空间
        默认的命名空间,所有名字都在全局命名空间中。
        使用方式:直接忽略或者只写 ::
        例如:定义全局函数void test();,默认就是在全局命名空间中,调用方式test()或者::test()。
        在C++中,不带.h后缀的头文件所包含和定义的标识符在std空间中;
        带.h后缀的头文件所包含和定义的标识符在全局命名空间中,不需要声明使用std空间
命名空间的作用:避免全局变量、函数、类的命名冲突(因为名字相同而编译失败)。
定义命名空间:namespace 空间名 { }

引用命名空间:using namespace 空间名;

 标准命名空间:std

####   动态内存   ####
实验:分别实验以下C和C++代码,分析总结

源代码:dynamic_mem.c

#include <stdio.h>
#include <stdlib.h>

int main()
{
        int *num = (int *)malloc(sizeof(int));
        *num = 100;
        printf("%d \n",*num);
        free(num);
//      delete num;//error: unknown type name ‘delete’ C语言不识别delete
}

源代码:dynamic_mem.cpp

#include <iostream>
#include <cstdlib>

using namespace std;

int main()
{
        int *num = new int;
        *num = 100;

        cout << *num << endl;
//      delete num;
        free(num);
        cout << *num << endl;
        return 0;
}
//malloc/free是C/C++语言的标准库函数,new/delete是C++的运算符。
//既然new/delete的功能完全覆盖了malloc/free,为什么C++还保留malloc/free呢?因为C++程序经常要调用C函数,而C程序只能用malloc/free管理动态内存。如果用free释放“new创建的动态对象”,那么该对象因无法执行析构函数而可能导致程序出错。如果用delete释放“malloc申请的动态内存”,理论上讲程序不会出错,但是该程序的可读性很差。所以new/delete、malloc/free必须配对使用。
问题:

1,malloc()申请内存,是否可以使用delete销毁内存?

可以使用;但是会使代码的可读型降低;不建议,也不合理。

2,new申请内存,是否可以使用free()销毁内存?
不可以;如果用free释放“new创建的动态对象”,那么该对象因无法执行析构函数而可能导致程序出错。

/*
问题:
1,命名空间占内存大吗?
不占,内存存放函数地址,参数,变量等

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

3,const关键字作用与#define宏定义区别?
const 在编译阶段执行;且要进行类型检查
#define在预编译阶段;不进行类型检查,只是单纯替换

4,const char * p;char * const p与char const *p区别?
1,3一样;const修饰char* 标示指针指向的内容不可修改
2,标示指针的指向不可修改
*/


  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
基础概念) C++从零开始(二)——何谓表达式(说明各操作符的用处,但不是全部,剩余的会 在其它文章提到) C++从零开始(三)——何谓变量(说明电脑的工作方式,阐述内存、地址等极其重 要的概念) C++从零开始(四)——赋值操作符(《C++从零开始(二)》的延续,并为指针的 解释打一点基础) C++从零开始(五)——何谓指针(阐述指针、数组等重要的概念) C++从零开始(六)——何谓语句(讲解C++提供的各个语句,说明各自存在的理 由) C++从零开始(七)——何谓函数(说明函数及其存在的理由) C++从零开始(八)——C++样例一(给出一两个简单算法,一步步说明如何从算法 编写出C++代码) C++从零开始(九)——何谓结构(简要说明结构、枚举等及其存在的理由) C++从零开始(十)——何谓类(说明类及其存在的理由,以及声明、定义、头文件 等概念) C++从零开始(十一)——类的相关知识(说明派生、继承、名字空间、操作符重载 等) C++从零开始(十二)——何谓面向对象编程思想(阐述何谓编程思想,重点讲述面 向对象编程思想) C++从零开始(十三)——C++样例二(说明如何设计基于面向对象编程思想的C+ +程序) C++从零开始(十四)——何谓模板(说明模板技术及其存在的理由) C++从零开始(十五)——何谓异常(说明异常技术及其存在的理由) C++从零开始(十六)——何谓预编译指令(说明预编译指令的概念及几个常用指令 的应用) C++从零开始(十七)——C++中的一些生僻关键字(explicit、mutable、volatile等的说 明) C++从零开始(十八)——何谓SDK(说明为什么没有放音乐的指令却依然可以编出 放音乐的程序) C++从零开始(十九)——何谓C运行时期库(说明C运行时期库这一大多数问题的元 凶) C++从零开始(二十)——关于VC的一点点基础知识(说明VC的几个基本概念和一 些常用设置) C++从零开始(二十一)——C++样例三(使用VC编写一个通过DLL实现多态性的简 单程序)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值