C++面向对象(类)学习笔记

文章目录


前言

记录了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语言结构的用法十分相似,实现的功能也大相径庭。

  • 4
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值