美文网首页
2-ndk学习之c++基础篇(02)

2-ndk学习之c++基础篇(02)

作者: ftd黑马 | 来源:发表于2020-01-16 18:04 被阅读0次

    由于clion有时间过期的限制,从这篇文章开始,之后所有的代码都在as上敲写学习了。

    as上新建一个c++项目

    image.png
    image.png

    新建好项目后,默认生成:


    image.png
    其中在cmakeLists文件中,"#"就是java中的"//",注释的意思,把这些注释删掉:
    image.png

    新建自己的mylog,话不多说,直接沾代码:

    //
    // Created by guow on 2020/1/16.
    //
    
    #ifndef CPPPROJECT_MYLOG_H
    #define CPPPROJECT_MYLOG_H
    
    #endif //CPPPROJECT_MYLOG_H
    
    #include <android/log.h>
    
    #define TAG "ftd"
    
    #define LOGD(...)__android_log_print(ANDROID_LOG_DEBUG,TAG,__VA_ARGS__)
    

    其中ftd就是咱们在java中最熟悉不过的TAG
    其中#include <android/log.h>这个是ndk系统中的log库,自定义好自己的mylog,后续调用直接引入mylog.h的头文件,LOGD()使用就好;

    c++的面向对象

    创建Student.h头文件,创建Student.cpp文件,养成习惯,文件都要对应有自己的头文件,在头文件中简单写个无参构造和有参构造:

    #pragma once
    
    #include <iostream>
    
    #ifndef CPPPROJECT_STUDENT_H
    #define CPPPROJECT_STUDENT_H
    
    #endif //CPPPROJECT_STUDENT_H
    
    
    class Student{
        //默认都是私有的
    public:
        Student();
        Student(int age);//有参构造
        ~Student();//析构函数
    private:
            int age;
    };
    

    这里说一下析构函数的功能,每当对象被释放回收,就会执行这个方法,类似于安卓中的onDestroy()。接着咱们在Student.cpp中调用:

    #include "Student.h"
    #include "mylog.h"
    using namespace std;
    
    Student::Student() {
        LOGD("无参构造方法");
    }
    
    Student::Student(int age) {
        this->age = age;
        LOGD("有参构造方法");
    }
    Student::~Student() {
        //当对象被释放回收,就会执行这个方法
        LOGD("析构方法");
    }
    

    最后就是在native-lib.cpp中调用测试,(这个属于jni的学习点,后续文章应该会有详细的介绍)

    //Student student;//在栈中进行创建,这行代码执行完就出栈因此还会调用析构函数
    Student *student = new Student; // 在堆建立引用
    delete student; // 必须释放,只有释放后才会走析构函数
    

    友元函数和友元类

    关键字:friend
    在c++中,友元函数和友元类的意义,顾名思义,就是当作好朋友,当作好朋友以后,就可以访问好朋友中的私有成员了,否则是不可以访问私有成员的。
    首先在Student.h的头文件中,添加一般函数和友元函数的声明:

    //友元函数,只有成为友元函数才能修改私有属性,在main.cpp中
    //    friend void method(Student *student);
    //    void method(Student *student);
    

    然后在main.cpp中调用,会发现只有被友元函数修饰的才可以调用。
    同样的友元类


    image.png
    image.png

    常量函数

    关键字:const
    在Student.h的头文件中声明:

      void setAge(int age) const ;
    

    声明为常量函数后,在Student.cpp中调用setAge方法是不能修改age值的。


    image.png

    相关文章

      网友评论

          本文标题:2-ndk学习之c++基础篇(02)

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