美文网首页
2020-02-28 从php开始学c++

2020-02-28 从php开始学c++

作者: 文秀卿 | 来源:发表于2020-02-29 20:44 被阅读0次
    //1.C++引入命名空间
    namespace  mynamespace{//第一次创建
         void myfun(){
         }
    }
    namespace  mynamespace{//第二次使用,可以新增函数和代码
    
    }
    mynamespace::myfun();//调用
    //1.2 引入命名空间
    #include mynamespace.h
    using mynamespace;
    myfun();
    //2.1 输入和输出
    std::cout << first << second << std::endl;//输出firstsecond
    std::cin >> value1 >> value2;//接受两个输入值,赋值给value1和value2
    //3 变量别名,公用同一段内存,也就是php的绝对引用
    int age = 18;
    int &copyage = age;
    4 常量 
    const myconst = 1;//不能用变量赋值,比如const myconst = aaa; 是不行的
    constexpr myconst2 = 2;//预编译的常量
    constexpr  int myfun(){
       int abc;
       for(i=0;i<10;i++){
            std::cout <<  i  << std::endl;//报错,表达式必须包含常量值
       }
       return 5;
       
    }
    constexpr int myconst3 = myfun();//不允许,其中int abc未初始化
    //字符拷贝 strcopy_s取代strcopy
    //5 分配内存 new/delete   取代 malloc/free
    //6 函数声明类型后置
    auto myfun(int a,int b)->void;//函数声明
    auto myfun(int a,int b)->void//函数定义
    {
       return;
    }
    //7.1 vector 容器关键字,类似结构
    //7.2 const常量关键字,const值不可改变
    vector<int> vecvalue{1,2,3,4,5};
    //7.3常量迭代器
    const vector<int>::iterator iter;
    //7.4 begin,end返回常量迭代器
    for (auto iter = iv.begin();iter != iv cend(); ++iter){
       cout << *iter << endl;
    }
    //7.5 迭代器失效,不要在循环时修改数据
    for (auto vecitem : vecvalue){
      //改变vecitem的值会报错
      cout << vecitem << endl;
    }
    for (auto beg=vecvalue.begin(),end = vecvalue.end();beg != end;++beg){
      //改变beg的值会报错
      cout << *beg << endl;
    }
    //8.1 类的构造函数
    C++中,存在先写函数声明,另写函数定义,参数的默认值只能在函数声明的时候给
    //8.2 构造函数可以存在多个,但是参数的属性或者参数一定要有区别
    //8.3 构造函数定义前使用explict关键字, 构造函数只能显式类型转换。
    // 防止在单参数的构造函数时,发生对传入的不合规参数进行隐形类型转换
    //8.4 构造函数初始化列表,用来构造函数后,快捷定义成员变量
    public:
           int selfVar;
    MyClass::MyClass(int myVar)
                  :selfVar(myVar)//构造函数初始化,提倡所有成员变量使用这用方法
    {
       //selfVar = myVar;//等同赋值操作
    }
    //8.5 在类里的函数后面使用const关键字,表示const函数不会修改类中的成员变量
          const成员变量,只能调用const函数,确保不会被修改
    //8.6 可以使用multible修饰成员,可以调用const/非const函数
    
    //9 static修饰符,编译时生效一次,限制某个全局变量只能在当前文件生效,声明后使用则定义时不用使用,默认给0
    //10.拷贝构造函数
    public:
       Time(Time &tempTime,int a =50)//拷贝构造函数,在类对象某些形式拷贝的时候自动调用
    //11重载赋值运算符时,对传入的参数使用const类型,可以防止被拷贝值的被修改
    //12 析构函数,在销毁时调用,使用~加类名作为名称,不可被重载
    //13.1使用vitual修饰符,在父类/基类中修饰函数,为虚函数,则父类指针使用子类初始化时,在调用子类的时候可以调用虚函数
    Human *human = new Men;
    human->eat;//调用子类Men中的eat函数
    human->Human::eat;//调用父类中,的eat函数(修饰为vitual的虚函数)
    //13.2父类中声明为虚函数的,子类中的同名函数也要为同参数且为虚函数,不一样则会覆盖父类中同名函数,在C++11中使用overwrite作为结尾,表示覆盖父类中的同名虚函数。
    //13.3如果在父类的函数声明中使用final关键字的虚函数,则该函数无法被重写
    //13.4虚函数声明后,必须被定义,在执行中才知道被绑定的位置
    //13.5虚函数的多态性,指执行时会找到虚函数的列表,对应的函数入口,为虚函数运行时的多(状)态性
    //13.6纯虚函数,在父类中没有定义自己的函数实现,但是子类中都要实现这个方法,这个类也成为抽象类,不能生成对象,仅用来管理子类对象
    virtual vitualFun() = 0;
    //还可以
    //基类的指针New子类的对象,在delete时不会不会调用子类的析构函数,导致内存泄漏,所以一般定义析构函数为虚函数,使用其多态性。
    //13.7 基类有了虚函数,就会为该类生成到虚函数表。则该类的基类指针,则可以用dynamic_cast(用于转化父类指针为派生类指针)和typeid(返回指针或者指针对象的实际类型)实现RRTI功能
    //14 把函数设置为一个类的友元函数,则可以访问类中的所有对象,使用friend修饰符。也可以定义友元类,友元的定义是单向,不可传递继承的
    //15 左值和右值,不能在左边被赋值的为右值,左值引用把右侧的值绑定到左侧,右值引用把左侧绑定到右侧(比如地址引用)
    
    
    

    相关文章

      网友评论

          本文标题:2020-02-28 从php开始学c++

          本文链接:https://www.haomeiwen.com/subject/qmxdhhtx.html