學(xué)完c然后學(xué)c++基本語法,開始還是會有一些轉(zhuǎn)變不過來
#pragma once表示只導(dǎo)入一次頭文件
new關(guān)鍵字的使用,需要在堆內(nèi)存分配內(nèi)存的時候使用,和c的動態(tài)分配內(nèi)存相同,使用完手動調(diào)用delete(void *);
命名空間(name namespace)
使用:
//這里代表使用命名空間和java導(dǎo)包有點類似
using namespace std;
//導(dǎo)入后可以這樣使用
cout << "這是命名空間" << endl;
//未導(dǎo)入命名空間
std::cout << "name is joker" << std::endl;
作用域符號::的前面一般是類名稱,后面一般是該類的成員名稱
再來一個自己定義的列子:
//定義一個命名空間
1.不導(dǎo)入
namespace TSIMEON {
void name() {
std::cout << "name is tsimeon" << std::endl;
}
}
int main() {
//使用
TSIMEON::name();
}
2.導(dǎo)入
using namespace TSIMEON;
int main() {
//使用
name();
}
類(關(guān)鍵字class)
修飾符[默認是private]這一點和java有所不同
public
private
-
protected
使用:
Student.h
#ifndef JNIWORK_STUDENT_H
#include <iostream>
using namespace std;
#define JNIWORK_STUDENT_H
class Student {
//享元函數(shù)
friend void changeAge(Student *);
friend class Teacher;
//默認是private
string name;
int age;
public:
//構(gòu)造函數(shù)
Student();
//構(gòu)造函數(shù)
Student(string name, int age);
//析構(gòu)函數(shù)
~Student();
string getName() {
return this->name;
}
int getAge() {
return this->age;
}
private:
bool sex;
};
class Teacher {
public:
void modifyStu(Student *stu) {
stu->name = "班主任:名字給你改了";
}
};
#endif //JNIWORK_STUDENT_H
Student.cpp
#include "Student.h"
#include <iostream>
using namespace std;
Student::Student() {
cout << "無參構(gòu)造函數(shù)" << endl;
}
Student::Student(string name, int age) : name(name), age(age) {
cout << "有參數(shù)構(gòu)造函數(shù)" << endl;
}
Student::~Student() {
//釋放內(nèi)存的時候自動調(diào)用_可以做一些收尾的工作
cout << "析構(gòu)函數(shù)" << endl;
}
//運行函數(shù)
int main() {
Student *student = new Student("tsimeon", 29);
cout << student->getName() << endl;
changeAge(student);
cout << "改變后的名字:" << student->getName() << endl;
Teacher teacher;
//修改學(xué)生的名字
teacher.modifyStu(student);
cout << "老師修改后的名字:" << student->getName() << endl;
//釋放
delete (student);
student = 0;
}
理解:享元類和享元函數(shù)可以訪問私有的變量。析構(gòu)函數(shù)是釋放內(nèi)存的時候自動調(diào)用_可以做一些收尾的工作
單列和java類似(保證構(gòu)造方法私有化)
Instance.h
#ifndef JNIWORK_INSTANCE_H
#define JNIWORK_INSTANCE_H
//單列
class Instance {
private:
static Instance *instance;
//構(gòu)造方法私有化
Instance();
public:
static Instance *getInstance();
};
#endif //JNIWORK_INSTANCE_H
Instance.cpp
#include "Instance.h"
//構(gòu)造方法
Instance::Instance() {
}
Instance *Instance::getInstance() {
//c++11 編譯器 保證內(nèi)部靜態(tài)變量 的線程安全
if (!instance) {
instance = new Instance();
}
return instance;
}
使用:
int main() {
Instance *instance = Instance::getInstance();
}
運算符重載
可以重定義或重載大部分 C++ 內(nèi)置的運算符摩渺。
重載的運算符是帶有特殊名稱的函數(shù)窄驹,函數(shù)名是由關(guān)鍵字 operator 和其后要重載的運算符符號構(gòu)成的
1.成員函數(shù)寫法
Operator.h
//運算符重載
#ifndef JNIWORK_OPERATOR_H
#define JNIWORK_OPERATOR_H
#pragma once
#include <iostream>
using namespace std;
class Operator1 {
public:
int i = 0;
Operator1() {
}
//成員函數(shù)運算符重載
Operator1 *operator+(const Operator1 &t) {
Operator1 *temp = new Operator1();
temp->i = this->i + t.i;
return temp;
}
};
#endif //JNIWORK_OPERATOR_H
使用:
int main() {
Operator1 op0;
op0.i = 100;
Operator1 op1;
op1.i = 100;
//Operator1* operator2 = op0.operator+(op1);這句話相當于下面這句,運算符重載
Operator1 *operator2 = op0 + (op1);
cout << operator2->i << endl;
//輸出值是200
return 0;
}
2.普通寫法
//運算符重載
int operator+(const Operator1 &t1, const Operator1 &t2) {
return t1.i + t2.i;
}
int main() {
Operator1 op0;
op0.i = 100;
Operator1 op2;
op2.i = 100;
//Operator1* operator1 = op0.operator+(op2);這句話相當于下面這句,運算符重載
int value = op0 + (op2);
cout << value << endl;
//輸出值依然是200
return 0;
}