美文网首页
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)

    由于clion有时间过期的限制,从这篇文章开始,之后所有的代码都在as上敲写学习了。 as上新建一个c++项目 新...

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

    文件操作 首先是c语言读取文件:需要先添加头文件, 然后是c++读取文件:先添加头文件: 多线程入门 c++的多线...

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

    c++是在c的基础上进行封装的,数据类型基本上都差不多,最大的差异就表现在c++是面向对象的语言,在c++中,有c...

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

    在c++源码中,会有很多俗称“鬼画符”的代码,很多都是用到了运算符重载 运算符重载 在函数中调用: 继承 在mai...

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

    容器 c++中的容器分为两种:1.序列化容器,元素的排序关系,和元素本身没有任何关系,是我们在添加的时候的顺序导致...

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

    这篇文章写一下c++经典案例,生产者消费者模式,我在代码中的注释写的很详细,这边就不多写了,干货哦!!!工具类代码...

  • java多线程相关

    (一) 基础篇 01.Java多线程系列--“基础篇”01之 基本概念 02.Java多线程系列--“基础篇”02...

  • c++学习笔记之基础篇

    c++学习笔记系列:http://blog.csdn.net/column/details/17301.html ...

  • HIDL实战笔记

    目录 第一篇:HIDL学习笔记之HIDL C++(第一天)第二篇:HIDL学习笔记之HIDL C++(第二天)第三...

  • 测试培训大纲-单元测试

    一、单元测试之基础篇 01 基础工具和环境 IDE/junit/assertj... 02 自动化测试四象限与单元...

网友评论

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

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