• C++基础一


    1.一个面向对象编程的计算圆面积的程序

    #include<iostream>

    using namespace std;

    class MyCicle{

    public:
    double m_s;
    double m_r;

    public:

    void setR(double r)//成员函数
    {
    m_r=r;

    }

    double getR()//成员函数
    {
    return m_r;
    }
    double getS()//成员函数,保证不出现上面的乱码情况
    {
    m_s=3.14*m_r*m_r;
    return m_s;
    }
    };

    int main(int argc, char const *argv[])
    {
    //普通方式执行
    double r=0,s=0;
    cout<<"input the r:"<<endl;
    cin>>r;//键盘流入到变量中去
    cout<<"r:"<<r<<endl;
    s=3.14*r*r;
    cout<<"the area is :"<<s<<endl;
    //面向对象的方式执行
    MyCicle c1; c1.setR(r);//给c1圆形的属性赋值。
    cout<<"object______the area is:"<<c1.getS()<<endl;

    cout<<"这是中文"<<endl;

    return 0;
    }

     可在当前目录下新建output目录,再进入output目录中 执行 g++ ../yuan.cpp  以便使源文件和目标文件隔离开。

    geany编辑器:sudo apt-get install geany

    此编译器可以编译,再点击生成,生成与源文件同名的可执行文件,此处生成的文件 即为:   yuan

     2.注意中英文空格的编码不同

    #include"iostream" //此头文件中没有引入标准的std,需要手工写,C++为了和C区分开,规定不使用.h后缀

    using namespace std;

    namespace namespaceA
    {
    int a=10;
    }
    namespace namespaceB
    {
    int a=20;
    namespace namespaceC
    {struct Teacher{char name[32];
    int age;
    };
    }

    }
    int main()
    {
    using namespace namespaceA ;
    std::cout<<"test"<<std::endl;//没有写 using name std    这句代码时,这样引用std
    cout<<"tian na"<<endl;
    cout<<a<<endl;
    namespaceB::namespaceC::Teacher t1;//告诉c++ 我要使用命名空间了
    t1.age=33;

    cout<<t1.age<<endl;

    return 0;
    }

    C++对比C的增强:

    1.在c中不是定义区的定义,不能通过编译,而c++可以

    例如:

    在main中有如下语句:在c编译器中将报错,而c++不会

    int a;

    printf(" hello ");

    int b;

    printf("  a=%d  b=%d ",a,b);

    2.c不能在寄存器变量(访问速度更快)上取地址,而c++可以。为提高执行效率,C++允许将局部变量的值放在CPU中的寄存器中,需要用时直接从寄存器取出参加运算,不必再到内存中去存取

    例如:register int a=0;

    printf("&a :%d ",&a);

    3.变量检测增强,以下在c中不报错,在c++中将检测出来:

    int a;

    int a=33;

    void main()

    {

    printf("a=%d ",a);  //做测试可发现,都将打印33;

    }

    4.struct 类型加强

     struct Teacher

    {

    int age;

    };

    int main()

    {

    struct Teacher t1;  //c语言必须这么写,而在c++中可不必加上struct

    }

    ubuntu下编译生成可在Windows下运行的exe文件:

    apt-get install mingw32  #提示无法定位,解决方法如下

    sudo gedit /etc/apt/sources.list

    //在sources.list末尾添加,保存 

    deb http://us.archive.ubuntu.com/ubuntu trusty main universe 

    sudo apt-get update 

    sudo apt-get install mingw32

    遇到提示无法获得锁时:1. 查看进程 ps aux | grep apt #列出所有占用apt资源的进程,
    结果中,第一列代表用户,第二列是进程id,而我们要做的就是强制结束这个进程;

    2.结束其他进程 sudo kill 进程id
    3.继续执行你之前的命令
    ubuntu下编译cpp文件,编译c文件将g++改为gcc即可

     编译命令:  i586-mingw32msvc-g++ aa.cpp -o aa.exe

    c++中的const:

    const int *c;  //const修饰的是指针所指向的内存空间,不能被修改

    int * const d;  //指针变量本身的值不能被修改

    c中的const:(冒牌货)

    const int a=10;  //C++会将const变量放到符号表中单独保存,

    int *p=NULL;

    p=(int *)&a;//在c++中会重新分配一个内存空间给p,在这个内存空间中修改值对符号表中a的值无影响。

    *p=20;  //此时a的值已经被修改为20,此处代码放到c++编译器中执行,a的值仍旧为10.

    printf("a:%d ",a);

    C++会将const变量放到符号表中单独保存,

    const与#define:

    const常量是由编译器处理的,提供类型检查和作用域检查。宏定义由预编译器处理,单纯的文本替换。

    int a=10;

    int b=20;

    int array[a+b];  //在c或c++中是不支持这种语法现象的,但是在a,b的定义前加 const后是可以通过编译的。

    
    
  • 相关阅读:
    Spring常用注解
    mybatis注解映射的简单分类
    Java框架中各层作用简述
    maven中groupId和artifactId的含义
    mybatis缓存
    防盗链的基本原理
    将部分字符串转化成JsonArray
    风螺旋线的进入
    3D转弯保护区长啥样?
    风螺旋线公切线的算法
  • 原文地址:https://www.cnblogs.com/wddx5/p/12714952.html
Copyright © 2020-2023  润新知