文章目录
前言
记录了C++类的学习笔记,主要记载基于C语言结构体学习C++类的学习笔记记录。
一、类是什么?
类(class)是一种将数据和函数组织在同一个结构里的逻辑方法。定义类的关键字为class ,其功能与C语言中的struct类似,不同之处是class可以包含函数,而不像struct只能包含数据元素。除此以外还有权限的区别如public和private权限。
定义一个类,本质上是定义一个数据类型的蓝图。这实际上并没有定义任何数据,但它定义了类的名称意味着什么,也就是说,它定义了类的对象包括了什么,以及可以在这个对象上执行哪些操作。
类定义是以关键字 class 开头,后跟类的名称。类的主体是包含在一对花括号中。类定义后必须跟着一个分号或一个声明列表。例如,我们使用关键字 class 定义 Box 数据类型,如下所示:
class Box
{
public:
double length; // 盒子的长度
double breadth; // 盒子的宽度
double height; // 盒子的高度
};
关键字 public 确定了类成员的访问属性。在类对象作用域内,公共成员在类的外部是可访问的。也可以指定类的成员为 private 或 protected。
二、类与结构的区别
1.分别用结构体和类写链表//自引用结构
结构体:
#include<stdio.h>
typedef struct Point{//typedef重新定义类型为Point
int x;
int y;
struct Point* next;//定义一个指针分量用于指向下一个结构以实现链表
}Point;
int main(){
Point p1, p2, p3, p4, p5;//定义p1,p2,p3,p4,p5五个结构体
Point *p;//定义一个指针用于指向一个结构体
p1.x=1;p1.y=0;
p2.x=2;p2.y=3;
p3.x=3;p3.y=4;
p4.x=4;p4.y=5;
p5.x=5;p5.y=6;
p1.next=&p2;
p2.next=&p3;
p3.next=&p4;
p4.next=&p5;
p5.next=NULL;//终止符号
for(p = &p1;p!=NULL;p=p->next)//通过指针来输出结构体中的数据
printf("(%d,%d)\n",p->x,p->y);
return 0;
}
执行结果 :
2.类(类中可以写成员函数)
#include<iostream>
using namespace std;
class Point//类名为Point
{
public:
int x;
int y;
Point* next;//定义一个指针分量用于指向下一个结构以实现链表
Point()//初始化
{
x=0;y=0;next=NULL;
}
void print();
};
void Point::print(){
cout<<"("<<this->x<<","<<this->y<<")"<<endl;
}
int main(){
Point p1, p2, p3, p4, p5;//定义p1,p2,p3,p4,p5五个结构体
Point *p;//定义一个指针用于指向一个结构体
p1.x=1;p1.y=0;
p2.x=2;p2.y=3;
p3.x=3;p3.y=4;
p4.x=4;p4.y=5;
p5.x=5;p5.y=6;
p1.next=&p2;
p2.next=&p3;
p3.next=&p4;
p4.next=&p5;
p5.next=NULL;//终止符号
for(p = &p1;p!=NULL;p=p->next)//通过指针来输出结构体中的数据
p->print();
return 0;
}
执行结果:
类与结构体的一个区别就是可以在内部声明和调用函数
2.类的public和private
二者最大的区别是访问权限,就是可以直接访问public和进行修改,而private中的数据只能通过对public的操作来完成。例子:利用链表。
强行访问时编译报错
正确访问方式:
#include<iostream>
using namespace std;
class Point
{
public:
Point(){
this->x=0;
this->y=0;
this->next=NULL;
}
int getX();
int getY();
Point* getNext();
void inPutX(int x);
void inPutY(int y);
void inPutNext(Point* next);
private:
int x;
int y;
Point* next;
};
int Point::getX(){return this->x;}
int Point::getY(){return this->y;}
Point* Point::getNext(){return this->next;}//一系列修改
void Point::inPutX(int x){this->x=x;}
void Point::inPutY(int y){this->y=y;}
void Point::inPutNext(Point* next){this->next=next;}
int main(){
Point P1,P2;
P1.inPutX(10);
P1.inPutY(15);
cout<<P1.getX()<<endl;
cout<<P1.getY()<<endl;
cout<<P1.getNext()<<endl;
P1.inPutNext(&P2);
cout<<P1.getNext()<<endl;
return 0;
}
执行结果
Notes:
class默认权限是private;
总结
类的应用很广泛可以应用在以后的java学习等等场景之中。C++类的用法和C语言结构的用法十分相似,实现的功能也大相径庭。