C++杂谈

写这篇博客的主要目的是为了巩固自己在C++的学习,主要有一下几个知识点:
1.介绍一下C++
2.为什么C++支持重载?C语言不支持–重点
3.缺省参数
4.命名空间

一.C++简介

   C++简单来说,是C语言的继承,也可以说是带类的C。它是一种基于对象的程序设计语言。因为C++是由C语言发展而来,C++基本上支持C语言的一切语法,所以,C++也可面向过程编程。C++语言主要有三大特点:1.数据封装和数据隐藏;2.支持继承和重用;3.支持多态性。

二.为什么C++支持重载而C语言不支持

   重载,简单说,就是函数或者方法有相同的名称,但是参数列表不相同的情形,这样的同名不同参数的函数或者方法之间,互相称之为重载函数或者方法。
   要回答这个问题,就得了解源程序生成可执行文件的四个过程:1.预处理:进行展开头文件,宏替换,去掉注释和条件编译等处理;2.编译:检查语法的正确性,生成对应的汇编代码;3.汇编:将汇编代码转换成机器码;4.链接到一起生成可执行程序。从这四个过程中,我们知道函数在编译过程中会生成对应的汇编代码,那么这就是关键了,C++在编译过程中会对函数名进行修饰,而C语言不会。下面让我们看个栗子把:
  #include<stdio.h>
  void print(int i)
  {
       printf("%d",i);
  } 
  void print1(char c)
  {
      printf("%c",c);
  }
 void print2(int i,char c)
 {
     printf("%d",i);
     printf("%c",c);
 }
 int main()
 {
     return 0;
 }

这里写图片描述

这里写图片描述

这两张图片是我在Linux环境下分别用gcc和g++编译上面代码生成的汇编代码。想亲自动手实验的可根据下面指令进行操作。

vim test.c  //创建一个文件
            //编辑代码  可用上面的代码
gcc test.c  //gcc编译
objdump -S  //看汇编代码
sudo yum install gcc-c++  //没装g++的 可用该指令安装

g++ test.c  //g++编译
objdump -S 

三:缺省参数

    所谓缺省参数,顾名思义,就是在声明函数的某个参数的时候为之指定一个默认值,在调用该函数的时候如果采用该默认值,你就无须指定该参数。缺省参数使用主要规则:调用时你只能从最后一个参数开始进行省略,换句话说,如果你要省略一个参数,你必须省略它后面所有的参数,即:带缺省值的参数必须放在参数表的最后面。可能有点晕,直接上代码:
//无缺省
int Add(int a,int b)
{
    return a+b;
}
int main()
{
    int a=2;
    int b=3;
    Add(a,b);//调用
    return 0;
}
//全缺省
int Add(int a=1,int b=2)
{
    return a+b;
}
int main()
{
    Add();//不传参数调用  结果为3
    Add(100);//100替换默认参数a=1;结果为102
    Add(100,10);//都替换; 结果为110
    reutrn 0;
}
//半缺省
int Add(int a,int b=2)
{
    return a+b;
}
int main()
{
    Add(10);
    Add(10,20);
    return 0;
}
//错误缺省
int Add(int a=1;int b)
{
    return a+b;
}

四:命名空间

    命名空间是用来组织和重用代码的编译单元。如同名字一样的意思,NameSpace(名字空间),之所以出来这样一个东西,是因为人类可用的单词数太少,并且不同的人写的程序不可能所有的变量都没有重名现象,对于库来说,这个问题尤其严重,如果两个人写的库文件中出现同名的变量或函数(不可避免),使用起来就有问题了,为了解决这个问题,引入了名字空间这个概念,通过使用 namespace xxx;你所使用的库函数或变量就是在该名字空间中定义的,这样一来就不会引起不必要的冲突了。
#include<iostream>
using namespace std;
namespace my
{
    int a=10;
}
int main()
{
    std::cout<<"hello world"<<endl;
    cout<<my::a<<endl;  // ::域作用符
    return 0;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值