从学习C语言过渡到C++的一些知识点

1.c++头文件不必是.h结尾,c语言中的标准库头文件如math.h,stdio.h在c++中命名为cmath,cstdio

#include <cmath>
#include <cstdio>
int main(){
   
    double a-1.2;
    a = sin(a);
    printf("%lf\n",a);
}

2.命名空间namespace

为防止名字冲突,c++引入了名字空间(namespace),通过::运算符限定某个名字属于哪个命名空间

//如 “电气1802”::“张三”
//如 “通信1910”::“张三”
#include<cstdio>
namespace first
{
   
    int a;
    void f(){
   }
    int g(){
   }
}
namespace second
{
   
    double a;
    double f(){
   }
    char g;
}
int main()
{
   
    first::a = 2;
    second::a =6.453;
    first::a = first::g()+second::f();
    
    printf("&d\n",first::a);
    printf("%lf\n",second::a);
    
    return 0;
}

通常有3种方法使用名字空间X的名字name:

using namespace X;//引用整个命名空间
using X::name;    //使用单个名字
X::name;          //程序中加上名字空间前缀,如X::

3.C++的新输入输出流库(头文件iostream)将输入输出看成一个流,并用输出运算符<<和输入运算符>>对数据(变量和常量进行输入输出);

其中有cout和cin分别代表标准输出流对象(屏幕窗口)和标准输入流对象(键盘);
标准库中的名字都属于标准名字空间std

#include<iostream>
using std::cout;//使用单个名字
int main(){
   
    double a;
    cout<<"从键盘输入一个数"<<std::endl; //endl表示换行符,并强制输出
    std::cin>>a;    //通过“名字限定”std::cin
                    //cin是代表键盘的输入流对象,>>等待键盘输入一个实数
    a=sin(a);
    cout<<a;        //cout是代表屏幕窗口的输出流对象
    return 0;
}
#include<iostream> //标准输入输出头文件
#include<cmath>
using namespace std;//引入整个命名空间std中的所有名字   //cout cin 都属于名字空间std
int main(){
   
    double a;
    cout<<"从键盘输入一个数"<<endl;
    cin>>a;
    a = sin(a);
    cout<<a;
    return 0;
}

4.变量“即用即定义”在函数内定义,且可以表达式初始化

doubel a=12*3.12;

5.程序块{}内部作用域可定义域外部作用域同名的变量,在该块里就隐藏了外部变量

#include<iostream>
using namespace std;

int main(){
   
    double a;
     cout<<"Type a number:";
     cin>>a;
     {
   
         int a=1;//int a隐藏了外部作用域的double a
         a=a*10+4;
         cout<<"Local number:"<<a<<endl;
     }
     cout<<"You typed:"<<a<<endl;//main作用域的“double a”
     return 0;
}

6. for循环语句可以定义局部变量

int main(){
   
    int i=0;
    for(int i=0;i<4;i++){
     //在for内定义局部变量,不影响for外部的变量
        cout<<i<<endl;
    }
    cout<<"i contains:"<<i<<endl;
}

7.访问和内部作用域变量同名的全局变量,要用全局作用域限定::

#include<iostream>
using namespace std;
double a = 128;

int main(){
   
    double a=256;
    cout<<"Local a:"<<a<<endl;    //输出函数内部局部变量
    cout<<"Global a:"<<::a<<endl; //::是全局作用域限定
    return 0;
}

8.C++引用了“引用类型&”,即一个变量是另一个变量的别名

#include<iostream>
using namespace std;
int main(){
   
    double a = 3.1415927;
    double &b = a;        //b是a的别名,b就是a
    b = 89;               //也就是a的内存块值为89
    cout<<"a contains:"<<a<<endl;   //最终输出 89
    return 0;
}

引用经常作为函数的形参,表示形参和实参的实际上是同一个对象,在函数中对形参的修改就是对实参的修改

引用举例:函数直接引用参数进行内存修改

#include<iostream>
using namespace std;

//xy是实参的引用
void swap(int &x,int &y){
   
    cout<<"swap函数内交换前:"<<x<<""<<y<<endl;
    int t=x;x=y;y=t;                             //在函数里已经进行了修改
    cout<<"swap函数内交换后:"<<x<<""<<y<<endl;
}
int main(){
   
    int a=3,b=4;
    swap(a,b);                //xy将分别是ab的引用,即x就是a,y就是b
    cout<<a<<","<<b<<endl;    //显示100,4
    return 0;
}

指针举例对比:参数传内存地址去函数修改

#include<iostream>
using namespace std;

void swap(int *x,int *y){
   
    cout<<"swap函数内交换前:"<<x<<""<<y<<endl;
    int t=x;x=y;y=t;                             
    cout<<"swap函数内交换后:"<<x<<""<<y<<endl;
}
int main(){
   
    int a=3,b=4;
    swap(&a,&b);    //&a赋值给x,&b赋值给y
                    //xy分别是int*指针,指向ab
                    //*x,*y就是a和b
    cout<<a<<","<<b<<endl;    //显示100,4
    return 0;
}

当实参占据内存大时,用引用代替传值(需要复制)可提高效率,

如果不希望因此无意中修改实参,可以用const修改符。如:

void change(double &x,const double &y,double z){
   
    x=100;  //引用了x,内存会进行修改
    y=200;  //内存的值并没有修改,因为const
    z=300;  //不是引用,也不会修改
}

int main(){
   
    double a,b,c;//内在类型变量未提供初始化,默认值为0;
    change(a,b,c);
    cout<<a<<b<<c<<endl;   //100 0 0
    return 0;
}

9.对于不包含循环的简单函数,建议用inline关键字声明,为“inline内联函数”,编译器将内联函数调用用其代码展开,称为“内联展开”,避免函数调用开销,提高程序执行效率

(一般很多编译器会自动将函数内联优化)

inline double distance(double a,double b){
   
    return sqrt(a*a+b*b);
}

int main(){
   
    double k=6,m=9;
    //下面两行将产生同样的代码
    cout<<distance(k,m)<<endl;
    cout<<
  • 5
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值