由于clion有时间过期的限制,从这篇文章开始,之后所有的代码都在as上敲写学习了。
as上新建一个c++项目
image.pngimage.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
网友评论