类、结构体、指针、引用
1.类与结构体
类的定义:
class Person
{
private:
int age,height;
double money;
string books[100];
public:
string name;
void say()
{
cout<<"I'm"<<name<<endl;
}
void set_age(int age1)
{
if(age1>=0 && age<=130)
{
age=age1;
}
}
int get_age()
{
return age;
}
void add_money(double x)
{
money+=x;
}
};
类中的变量和函数被统一称为类的成员变量
private后面的内容是私有成员变量,在类的外部不能访问;public后面的内容是公有成员变量,在类的外部可以访问。
类的使用:
#include<iostream>
#include<string>
using namespace std;
class Person
{
private:
int age,height;
double money;
string books[100];
public:
string name;
void say()
{
cout<<"I'm "<<name<<endl;
}
void set_age(int age1)
{
if(age1>=0 && age<=130)
{
age=age1;
}
}
int get_age()
{
return age;
}
void add_money(double x)
{
money+=x;
}
}person_a,person_b,persons[100];
int main()
{
Person c;
c.name="yxc"; //正确!访问公有变量
c.age=18 //错误!访问私有变量
c.set_age(18); //正确!set_age()是共有成员变量
c.add_money(100);
c.say();
cout<<c.get_age()<<endl;
return 0;
}
结构体和类的作用是一样的。不同点在于类默认的是private,结构体默认是public。
struct Person
{
private:
int age,height;
double money;
string books[100];
public:
string name;
void say()
{
cout<<"I'm "<<name<<endl;
}
void set_age(int age1)
{
if(age1>=0 && age<=130)
{
age=age1;
}
}
int get_age()
{
return age;
}
void add_money(double x)
{
money+=x;
}
}person_a,person_b,persons[100];
2.指针和引用
指针:存储变量,地址,的变量
int a=10;
int *p=&a;
cout<<p<<endl; //输出地址
cout<<*p+10; //输出a的值
数组名是一种特殊的指针。指针可以做运算:
int a[5]={1,2,3,4,5};
for(int i=0;i<5;i++)
cout<<*(a+i)<<endl;
引用与指针类似,相当于给变量起了个别名。
int a=10;
int &b=a;
b+=10;
cout<<a;
3.链表
#include<iostream>
using namespace std;
struct Node{
int val;
Node* next;
}*head;
int main(){
for(int i=1;i<=5;i++){
Node* p=new Node();
p->val=i;
p->next=head;
head=p;
}
for(Node* bl=head;bl;bl=bl->next) cout<<bl->val<<endl;
return 0;
}
4.删除链表中的元素
void Delete(int n){
Node* temp1=head;
if(n==1){
head=head->next;
delete temp1;
return;
}
else{
for(int i=1;i<n-1;i++)temp1=temp1->next;
Node* temp2=temp1->next;
temp1->next=temp2->next;
delete temp2;
}
}
4.链表的插入
void Insert(int val,int n){
Node* temp1=new Node();
temp1->val=val;
temp1->next=nullptr;
if(n==1){
temp1->next=head;
head=temp1;
return;
}
Node* temp2=head;
for(int i=1;i<n-1;i++)temp2=temp2->next;
temp1->next=temp2->next;
temp2->next=temp1;
}
5.链表的反转
void Fz(){
Node* prev=NULL;
Node* curr=head;
Node* next;
while(curr){
next=curr->next;
curr->next=prev;
prev=curr;
curr=next;
}
head=prev;
}
7.双向链表的插入
void Insert(int val,int n){
Node* temp1=new Node();
temp1->val=val;
temp1->next=NULL;
temp1->next=NULL;
if(n==1){
temp1->next=head;
head->prev=temp1;
head=temp1;
return;
}
Node* temp2=head;
for(int i=1;i<n-1;i++)temp2=temp2->next;
if(temp2->next){
temp1->next=temp2->next;
temp2->next=temp1;
temp2->next->prev=temp2;
temp1->next->prev=temp1;
}
else{
temp2->next=temp1;
temp1->prev=temp2;
}
}

浙公网安备 33010602011771号