1. 类和结构体
1.1 类的定义
class Person
{
private:
int age, height;
double money;
string books[100];
public:
string name;
void say()
{
cout << "I'm " << name << endl;
}
int get_age
{
return age;
}
void add_money(double x)
{
money += x;
}
);
- 类中的变量和函数被统一称为类的成员变量
- private后面的内容是私有成员变量,在类的外部不能访问;public后面的内容是公有成员变量,在类的外部可以访问
1.2 类的使用
#include <iostream>
using namespace std;
const int N = 1000010;
class Person
{
private:
int age, height;
double money;
string books[100];
public:
string name;
void say()
{
cout << "I'm " << name << endl;
}
int set_age(int a)
{
age = a;
}
int get_age()
{
return age;
}
void add_money(double x)
{
money += x;
}
} person_a, person_b, persons[100];
int main()
{
Person persons[100];
Person c;
c.name = "yxc";
c.age = 18;
c.set_age(18);
c.add_money(100);
c.say();
cout << c.get_age() << endl;
return 0;
}
- 结构体和类的作用是一样的。不同点在于类默认是private,结构体默认是public
1.3 结构体
- 结构体和类的作用是一样的。不同点在于类默认是private,结构体默认是public
struct Person
{
private:
int age, height;
double money;
string books[100];
int get_height()
{
return height;
}
public:
string name;
void say()
{
cout << "I'm " << name << endl;
}
int get_age
{
return age;
}
void add_money(double x)
{
money += x;
}
)person_a, person_b, persons[100];
1.4 构造函数
#include <iostream>
using namespace std;
struct Person
{
int age, height;
double money;
Person() {}
Person (int _age. int _height) : age(_age), hight(_hight) {}
Person(int _age, int _height, double _money)
{
age = _age;
height = _height;
money = _money;
}
Person(int _age, int _height, double _money) : age(_age), hight(_hight), money(_money){}
};
int main()
{
Person p;
Person p(18, 180, 100.0);
Person p = {18, 180, 100.0};
return 0;
}
2. 指针和引用
2.1 指针
- 指针指向存放变量的值的地址,因此我们可以通过指针来修改变量的值
#include<iostream>
using namespace std;
int main()
{
int a = 10;
int* p = &a;
*p += 5;
cout << *p << endl;
return 0;
}
#include<iostream>
using namespace std;
int main()
{
int a = 10;
int* p = &a;
int** q = &p;
cout << q << endl;
cout << *p << endl;
*p = 12;
cout << *p << endl;
cout << a << endl;
return 0;
}
2.2 数组
#include<iostream>
using namespace std;
int main()
{
int a[5] = {1,2,3,4,5};
for(int i = 0; i < 5; i++) cout << *(a + i) << endl;
return 0;
}
#include<iostream>
using namespace std;
int main()
{
char c;
int a[5] = {1,2,3,4,5};
int* p = &a[0], *q = &a[1];
cout << q - p << endl;
return 0;
}
#include<iostream>
using namespace std;
char a, b;
int main()
{
char c;
int a[5] = {1,2,3,4,5};
cout << (void*)&c << endl;
cout << a << endl;
for(int i = 0;i < 5;i++)
cout << (void*)&a[i] << endl;
return 0;
}
- 数组地址间隔4个字节,int型是4个字节
2.3 引用
#include<iostream>
using namespace std;
int main()
{
int a = 10;
int &p = a;
p += 5;
cout << p << endl;
return 0;
}
#include<iostream>
using namespace std;
int main()
{
int a = 10;
int* p = a;
int& p = a;
p += 5;
cout << p << endl;
return 0;
}
2.4 查询地址
#include<iostream>
using namespace std;
int main()
{
char c = 'a', b;
cout << (void*)&c << endl;
cout << (void*)&b << endl;
return 0;
}
3. 链表
#include<iostream>
using namespace std;
struct Node
{
int val;
Node* next;
Node(int _val) : val(_val), next(NULL) {}
}*head;
int main()
{
Node* p = new Node(1);
Node* q = new Node(2);
auto o = new Node(3);
p->next = q;
q->next = o;
Node* u = new Node(4);
u->next = head;
head = u;
head->next = head->next->next;
Node* head = p;
for(Node* i = head; i != 0; i = i->next)
cout << i->val << endl;
return 0;
}
3.1 添加结点
Node* u = new Node(4);
u->next = head;
head = u;
- u->next = head; 将head赋值给u->next
- head = u; 将结点u赋值给head
3.2 删除结点
head->next = head->next->next;