c++学习——类和对象

类和对象

    • 类和对象的基本概念
    • 类的封装
    • 尽量把成员属性设置为私有的
    • 小练习
    • 结构体和类的区别
    • 圆的周长类案例
    • 学生类的案例
    • 汽车案例
    • 立方体案例
    • 点和圆案例

类和对象的基本概念

类是自定义数据类型,是C语言的结构体进化而成的
对象是类实例化出的,用数据类型定义一个变量

#define _CRT_SECURE_NO_WARNINGS
#include 
using namespace std;

class Maker //这个是类
{
public:
	int a;//成员属性(成员变量)
	void func()//成员方法(成员函数)
	{
		cout << "func" << endl;
	}
};
int main()
{
	Maker m; //m就是对象
	system("pause");
	return EXIT_SUCCESS;
}

类的封装

C和C++中struct区别:
C语言struct只有变量
C++语言struct既有变量,也有函数

1、为什么要有封装?
封装是把属性(变量)和方法(函数)封装到类内,然后给这些数据赋予权限,防止乱调用函数和变量,出现错误,维护代码更方便
c++学习——类和对象_第1张图片
//类外不能访问私有权限的成员
//类外可以访问公有权限的成员
//类外不能访问保存权限的成员
//子类的类内可以访问父类的保护权限的成员 不能访问私有权限的成员
//类内是没有权限之分的

#define _CRT_SECURE_NO_WARNINGS
#include 
using namespace std;
#include

//封装:1、把属性和方法放到类中,给这些数据赋予权限
//类内
class Maker
{
public://公有权限
	void set(string Name,int Id)
	{
		id = Id;
		name = Name;
	}
	void printMaker()
	{
		cout << "id=" << id << endl << "name=" << name << endl;
	}
	void get()
	{
		cout << "Maker a=" << a << endl;
	}
private://私有权限
	int id;
	string name;
protected://保护权限
	int a;
};

//继承  公有继承
class Son :public Maker
{
public:
	void func()
	{
		//下面的a是从父类复制过来的
		a = 20;//子类的类内可以访问父类的保护权限的成员
		//id = 1;//err
	}
	void getS()
	{
		cout << "Son a=" << a << endl;
	}
};

void test02()
{
	Maker m;
	Son s;
	s.func();
	m.get();
	s.getS();
}

//类外不能访问私有权限的成员
//类外可以访问公有权限的成员
//类外不能访问保存权限的成员
//子类的类内可以访问父类的保护权限的成员  不能访问私有权限的成员
//类内是没有权限之分的

void test01()
{
	Maker m;
	m.set("露琪亚", 1);
	m.printMaker();
}

int main()
{
	test01();
	test02();
	system("pause");
	return EXIT_SUCCESS;
}

在这里插入图片描述

尽量把成员属性设置为私有的

#define _CRT_SECURE_NO_WARNINGS
#include 
using namespace std;
#include

class Maker
{
public:
	//写
	void setName(string Name)
	{
		name = Name;
	}
	//读
	string getName()
	{
		return name;
	}
	//写
	void setAge(int Age)
	{
		//可以保护属性的合法性
		if (Age > 0 && Age < 120)
		{
			age = Age;
		}
	}
	//读
	int getId()
	{
		return id;
	}
private:
	string name;
	int age;
	int id;
};



int main()
{
	system("pause");
	return EXIT_SUCCESS;
}

尽量把属性设置为私有权限
1、可以控制属性的读写权限
2、可赋予客户端访问数据的一致性
3、可以保护属性的合法性

小练习

c++学习——类和对象_第2张图片

#define _CRT_SECURE_NO_WARNINGS
#include 
using namespace std;
#include

class Maker
{
public:
	void Init()
	{
		name = "露琪亚";
		age = 18;
	}
	//set get方法
	void setN(string mName)
	{
		name = mName;
	}
	string getN()
	{
		return name;
	}
	void setA(int mAge)
	{
		if (mAge >= 0 && mAge <= 100)
		{
			age = mAge;
		}
	}
	int getA()
	{
		return age;
	}

	//打印方法
	void printMaker()
	{
		cout << "name: "  << name << " age: "  << age << endl;
	}
private:
	string name;
	int age;
};
int main()
{
	Maker m;
	m.Init();
	m.printMaker();
	m.setN("一护");
	m.setA(30);
	m.printMaker();
	cout << "name:" << m.getN() << " age:" << m.getA() << endl;
	m.getA();
	system("pause");
	return EXIT_SUCCESS;
}

在这里插入图片描述

结构体和类的区别

//结构体的默认权限是公有的
//类的默认权限是私有的

#define _CRT_SECURE_NO_WARNINGS
#include 
using namespace std;

//结构体的默认权限是公有的
//类的默认权限是私有的

//结构体
struct Maker1
{
	int a;
	void func()
	{

	}
public:
	int b;
};

//类
class Maker2
{
	int a;
	void func()
	{

	}
public:
	int b;
};

//继承
struct SonMaker1 :public Maker1
{

};

class SonMaker2 :public Maker2
{

};

int main()
{
	Maker1 m1;
	Maker2 m2;
	m1.b;
	m2.b;

	m1.a;
	//m2.a;err

	system("pause");
	return EXIT_SUCCESS;
}

c++学习——类和对象_第3张图片

圆的周长类案例

#define _CRT_SECURE_NO_WARNINGS
#include 
#include //c++字符串
using namespace std;
//自定义的数据类型
//设置圆的类
class Circle
{
//个人习惯  方法和属性写在不同的共有权限
public:
	//设置半径的长度
	void setR(double r)
	{
		mR = r;
	}
	//计算圆的周长
	double getL()
	{
		return 2 * 3.14*mR;
	}

public://共有权限
	double mR;//成员变量,成员属性
};

void test01()
{
	//数据类型定义变量
	//类实例化对象
	Circle c;
	c.setR(100);
	cout << "圆的周长=" << c.getL() << endl;
}

void test02()
{
	//字符串的操作
	const char *p = "hello";
	char buf[100] = "hello";
	cout << buf << endl;

	string str = "world";
	cout << str << endl;
}

int main()
{
	test01();
	test02();
	system("pause");
	return EXIT_SUCCESS;
}

学生类的案例

#define _CRT_SECURE_NO_WARNINGS
#include 
using namespace std;
#include 

class Student
{
public://公有
	void setName(string Name)//成员方法  成员函数
	{
		name = Name;
	}
	void setId(int Id)
	{
		id = Id;
	}
	void myprint()
	{
		cout << "姓名:" << name << "\n学号" << id << endl;
	}
private://私有权限
	string name;//成员属性
	int id;//成员属性
};
int main()
{
	Student s;
	s.setName("卡卡罗特");
	s.setId(1);
	s.myprint();
	system("pause");
	return EXIT_SUCCESS;
}

汽车案例

在这里插入图片描述

#define _CRT_SECURE_NO_WARNINGS
#include 
using namespace std;
#include

class Car
{
public:
	void init()
	{
		type = "BMW";
		Size = 5;
		Color = "白色";
	}
	void printCar()
	{
		cout << "品牌:" << type << " 大小:" << Size << endl;
	}
private:
	string type;
	int Size;
	string Color;
};

class SonCar :public Car
{
public:
	//写
	void setType(string Type)
	{
		type = Type;
	}
	void setMyT(int t)
	{
		MyT = t;
	}
	void setMynum(int num)
	{
		Mynum = num;
	}
	//读
	string getT()
	{
		return type;
	}
	int getMyT()
	{
		return MyT;
	}
	int getMynum()
	{
		return Mynum;
	}
	void printConSar()
	{
		cout << "品牌:" << type << " 吨位:" << MyT << " 轮子个数:" << Mynum << endl;
		Car::init();
		Car::printCar();
	}
private:
	string type;
	int MyT;
	int Mynum;
};

void test01()
{
	Car c;
	c.init();
	c.printCar();
}

void test02()
{
	SonCar sc;
	sc.setType("玛莎拉蒂");
	sc.setMyT(20);
	sc.setMynum(8);
	sc.printConSar();
}
int main()
{
	//test01();
	test02();
	system("pause");
	return EXIT_SUCCESS;
}

立方体案例

#define _CRT_SECURE_NO_WARNINGS
#include 
using namespace std;

class Cube
{
public:
	//初始化变量
	void init()
	{
		mL = 0;
		mW = 0;
		mH = 0;
	}

	//set
	void setL(int l)
	{
		mL = l;
	}
	void setW(int w)
	{
		mW = w;
	}
	void setH(int h)
	{
		mH = h;
	}

	//get
	int getL()
	{
		return mL;
	}
	int getW()
	{
		return mW;
	}
	int getH()
	{
		return mH;
	}

	//求立方体的面积
	int caculateS()
	{
		return 2 * mL*mW + 2 * mL*mH + 2 * mW*mH;
	}

	//求立方体的体积
	int calculateV()
	{
		return mL * mH * mW;
	}

	//成员函数比较立方体
	//这里在类里进行的   因此只需要传一个参数就行了
	bool CompareCube(Cube &cube)
	{
		if ( getL() == cube.getL() && getW()== cube.getW() && getH() == cube.getH() )
		{
			return true;
		}
		else
		{
			return false;
		}
	}
private:
	int mL;
	int mW;
	int mH;
};

bool IsCompareCube(Cube &c1,Cube &c2)
{
	if (c1.getH()==c2.getH() && c1.getW() == c2.getW() && c1.getL() == c2.getL())
	{
		return true;
	}
	else
	{
		return false;
	}
}

int main()
{
	Cube c1, c2;
	//初始化对象
	c1.init();
	c2.init();

	//设置立方体的长宽高
	c1.setL(10);
	c1.setW(20);
	c1.setH(30);

	c2.setL(10);
	c2.setW(20);
	c2.setH(30);

	if (c1.CompareCube(c2))
	{
		cout << "两个立方体相等" << endl;
	}
	else
	{
		cout << "两个立方体不相等" << endl;
	}

	if (IsCompareCube(c1,c2))
	{
		cout << "两个立方体相等" << endl;
	}
	else
	{
		cout << "两个立方体不相等" << endl;
	}

	system("pause");
	return EXIT_SUCCESS;
}

点和圆案例

c++学习——类和对象_第4张图片
c++学习——类和对象_第5张图片
Circle.h

#pragma once
#include "Point.h"
#include //数据公式的库
#include 
using namespace std;

class Circle
{
public:
	void SetR(int r);
	void SetHear(Point &p);
	void SetHear(int x, int y);

	int getR();
	Point getHear();

	//判断点和圆的关系
	void isPointAndCircle(Point &p);
private:
	int mR;//半径
	Point mHear;//圆心
};

Point.h

#pragma once

class Point
{
public:
	void setX(int x);
	void setY(int y);
	int getX();
	int getY();
private:
	int mX;
	int mY;
};

Point.c

#include "Point.h"

void Point::setX(int x)
{
	mX = x;
}

void Point::setY(int y)
{
	mY = y;
}

int Point::getX()
{
	return mX;
}

int Point::getY()
{
	return mY;
}

Circle.c

#include "Circle.h"
void Circle::SetR(int r)
{
	mR = r;
}
void Circle::SetHear(Point &p)
{
	mHear.setX(p.getX());
	mHear.setY(p.getY());
}
void Circle::SetHear(int x, int y)
{
	mHear.setX(x);
	mHear.setY(y);
}

int Circle::getR()
{
	return mR;
}
Point Circle::getHear()
{
	return mHear;
}

//判断点和圆的关系
void Circle::isPointAndCircle(Point &p)
{
	//获取圆心和点之间的距离的平方
	double distance = pow((p.getX() - mHear.getX()), 2) + pow((p.getY() - mHear.getY()), 2);
	//半径的平方
	double tmpR = pow(mR, 2);	
	//
	if (distance>tmpR)
	{
		cout << "点在圆外" << endl;
	}
	else if (distance == tmpR)
	{
		cout << "点在圆上" << endl;
	}
	else
	{
		cout << "点在圆内" << endl;
	}
}


30 点和圆的案例.cpp

#include "Circle.h"
void Circle::SetR(int r)
{
	mR = r;
}
void Circle::SetHear(Point &p)
{
	mHear.setX(p.getX());
	mHear.setY(p.getY());
}
void Circle::SetHear(int x, int y)
{
	mHear.setX(x);
	mHear.setY(y);
}

int Circle::getR()
{
	return mR;
}
Point Circle::getHear()
{
	return mHear;
}

//判断点和圆的关系
void Circle::isPointAndCircle(Point &p)
{
	//获取圆心和点之间的距离的平方
	double distance = pow((p.getX() - mHear.getX()), 2) + pow((p.getY() - mHear.getY()), 2);
	//半径的平方
	double tmpR = pow(mR, 2);	
	//
	if (distance>tmpR)
	{
		cout << "点在圆外" << endl;
	}
	else if (distance == tmpR)
	{
		cout << "点在圆上" << endl;
	}
	else
	{
		cout << "点在圆内" << endl;
	}
}

你可能感兴趣的:(c++学习,c++,学习,开发语言)