C++快速入门--1

本课程适合拥有C语言基础,和面向对象基础的同学

C++helloword
#include "iostream"
using namespace std;
int main(){
    cout<<"helloword"<<endl;
    //cout<< 为标准输出函数  endl为换行
    return 0;
}

面向过程面向对象的对比
用求圆面积和周长的例子来对比面向对象和面向过程的不同实现

//面向过程的方法
int main(){
    double r = 0;
    double s = 0;
    double c = 0;
    cout<<"请输入圆的半径";
    cin >> r;    //标准输入
    const double pi = 3.14;
    s = pi*r*r;
    c = 2 * r * pi;
    cout<<"圆的面积是"<<s<<endl;
    cout<<"圆的周长是"<<c<<endl;
    return 0;
}

//面向对象的思路解决这问题
class CirCle{
private:
    double m_s;
    double m_r;
    double m_c;
public:
    void setR(double r){
        this->m_r = r;
    }
    double getR(){
        return this->m_r;
    }
    double getS(){
        return this->m_r * m_r * 3.14;
    }
    double getC(){
        return this->m_r * 2 * 3.14;
    }
};
int main(){
    CirCle c1,c2;
    double r;
    cout<<"输入c1圆的半径"<<endl;
    cin>> r;
    c1.setR(r);
    cout<<"c1圆的面积是"<<c1.getS()<<endl;
    cout<<"c1元的周长是"<<c1.getC()<<endl;
    return 0;
}

有人可能在circle类中没有写函数,而是在声明时直接将m_s = m_r * m_r * 3.14,这样的情况下,它只在class初始化的时候用,而在以后调用的时,不会再执行m_r * m_r * 3.14;

c++中的命名空间
C++中的命名空间跟C#中的含义是一样的,引用命名空间直接使用
using namespace 空间名称即可,如上文helloword所示,如需自定义命名空间,可用如下方式定义

namespace namespaceA{
    class A{
        
    };
}

当你没有引入该引用的命名空间而使用了该命名空间下的内容的时,就需要使用命名空间名::使用的类名,例如std::cout<<“hello”<std::endl;

C++中的结构体
你完全可以像使用class一样来使用结构体,在C++中你可以像如下方式使用:

typedef struct Teacher{
    public :
    int num;
    public :
        void sayHello(){
            cout<<"hello"<<endl;
        }
}Teacher;

C和C++中的左值表达式之三目运算符
在java中,只见过 int i = 2>1?3:4;
但是在c和c++中,居然可以这么写

//c中
    int a = 10;
    int b = 20;
    *(a>b?&a:&b) = 30;
    printf("%d",b);
//c++中
    (a>b&a:b) = 30;    


C++中的引用
什么是C++中的引用呢?举个具体的例子,来看一段代码

    int a = 10;
    int &b = a;    //用&符号表示引用
    a = 100;
    cout<<a<<endl;
    cout<<b<<endl;
    b = 200;
    cout<<a<<endl;
    cout<<b<<endl;
    //以上依打印100 100 200 200

是不是跟指针很类似呢?这里也就是让a和b都指向同一个内存空间
这里可以理解成a和b是同一个变量,并且在引用的时候应该初始化
在形参中使用引用

扫描二维码关注公众号,回复: 5290386 查看本文章

void swap(int &a,int &b){
    int q = a;
    a = b;
    b = q;
}

以上的原理跟指针是一样的,只是在c++中可以直接用引用达到同样的效果
当引用成为返回值的时候,只能是全局变量或者静态变量或者动态内存分配的变量,如果只是普通的局部变量,可能会出现某些问题,例如,你返回引用之后,该内存会被释放,虽然C++尽量做了优化,但是有时还是会参数不可避免的问题

//想这种写法就是不行的
int & getB(){
    int b = 10;
    return b;
}

int main(){
    int b = getB();
    cout<<b<<endl;
    return 0;
}

以上b变量会在getB()函数结束时释放,在main方法中有时能打印到其值的原因可能是b所占的内容还没有被系统中其他内容所覆盖。所以应该修改程静态,这时变量在函数结束时不会被释放,在程序结束时才释放。

int & getB(){
    static int b = 10;
    return b;
}

int main(){
    int b = getB();
    cout<<b<<endl;
    return 0;
}

当然你还可以使用动态内存分配

int & getB(){
    int *b = (int *)malloc(sizeof(int));
    *b = 10;
    return *b;
}

int main(){
    int *b = &getB();
    cout<<*b<<endl;
    free(*b);
    return 0;
}

在C++中,引用还可以被当做左值

int & getB(){
    static int b = 10;
    cout<<b<<endl;
    return b;
}

int main(){
    getB() = 100;
    getB();
    return 0;
}
--------------------- 
作者:丶幻一 
来源:CSDN 
原文:https://blog.csdn.net/qq_25956141/article/details/79426121 
版权声明:本文为博主原创文章,转载请附上博文链接!

猜你喜欢

转载自blog.csdn.net/qq_38432154/article/details/87890282