C++:类和对象(封装)

c++面向对象的三大特性为:封装、继承、多态

c++认为万事万物皆为对象,对象上有其属性(成员变量)和行为(成员方法)

例如:人可以作为对象,属性有姓名、年龄......., 行为有走、跑、吃饭..........

  1. 封装
    1. 封装的意义
      1. 将属性和行为作为一个整体,表现生活中的事物
      2. 将属性和行为加以权限控制
    2. 语法
      1. 语法:class 类名{ 访问权限:属性 / 行为 };
      2. 实例化(通过一个类创建一个对象)
      3. 通过 . 访问属性和行为
      4. #include <iostream>
        
        using namespace std;
        
        const double PI = 3.14;
        
        //设计一个圆类,求圆的周长 2*PI*半径
        class Circle
        {
        	//访问权限
        public:
        	//属性
        	/** 半径*/
        	int r;
        
        	//行为
        	double calaZC()
        	{
        		return 2 * PI * r;
        	}
        };
        
        int main()
        {
        	//创建对象
        	Circle c1;
        	//赋值
        	c1.r = 10;
        	cout << "周长为:" << c1.calaZC() << endl;
        	system("pause");
        	return 0;
        }
    3. 通过行为给属性赋值

      1. #include <iostream>
        
        using namespace std;
        
        class Student
        {
        public:
        	string name;
        	string ID;
        
        	void setIofo(string name1, string ID1)
        	{
        		name = name1;
        		ID = ID1;
        	}
        	void print()
        	{
        		cout << "姓名:" << name << endl;
        		cout << "学号:" << ID << endl;
        	}
        };
        
        int main()
        {
        	Student s1;
        	Student s2;
        	s1.name = "张三";
        	s1.ID = "201831064117";
        	s1.print();
        
        	s2.setIofo("李四", "201831064118");
        	s2.print();
        	system("pause");
        	return 0;
        }

    4. 权限

      1. public        公共权限(类内可以访问,类外可以访问)

      2. protected       保护权限(类内可以访问,类外不可以访问(继承时,儿子可以访问))

      3. private        私有权限(类内可以访问,类外不可以访问(继承时,儿子不可访问))

    5. struct 和 class的区别

      1. struct默认权限为公共

      2. class默认权限为私有

      3. class a1
        {
        	int a;	//a默认私有权限
        };
        
        struct b1
        {
        	int b;	//b默认公共权限
        };

 成员属性设置成私有:

//可以自己控制读写权限

//对于写可以检测数据的有效性

class Person
{
public:
	//设置姓名
	void setName(string name)
	{
		m_Name = name;
	}
	//获取姓名
	string getName()
	{
		return m_Name;
	}
	//
	void setAge(int age)
	{
		if (0 < age && age <= 150)
		{ 
			m_Age = age;
		}
		else
		{
			cout << "设置失败" << endl;
			m_Age = 0;
		}
	}
	int getAge()
	{
		return m_Age;
	}
	//
	int getLover()
	{
		m_Lover = 0;
		return m_Lover;
	}
private:
	string m_Name;
	int m_Age;
	int m_Lover;
};

实例:

//设计一个方体类,计算面积与体积,判断两个方体是否一样

#include <iostream>

using namespace std;

class Cube
{
private:
	double m_L;
	double m_W;
	double m_H;

public:
	void setLWH(double L, double W, double H)
	{
		m_L = L;
		m_W = W;
		m_H = H;
	}

	double getL()
	{
		return m_L;
	}

	double getW()
	{
		return m_W;
	}

	double getH()
	{
		return m_H;
	}
	double getArea()
	{
		return (m_L * m_W) * 2 + (m_L * m_H) * 2 + (m_W * m_H) * 2;
	}

	double getVolume()
	{
		return m_L * m_W * m_H;
	}
};

void Judge(Cube c1,Cube c2)
{
	if (c1.getL() == c2.getL() && c1.getW() == c2.getW() && c1.getH() == c2.getH())
	{
		cout << "两个立方体相等" << endl;
	}
	else
	{
		cout << "两个立方体不相等" << endl;
	}
}


int main()
{
	Cube c1;
	Cube c2;
	Cube c3;
	c1.setLWH(2.22, 3.33, 4.44);
	c2.setLWH(2.22, 3.33, 4.44);
	c3.setLWH(3.33, 4.44, 5.55);
	cout << "c1的面积:" << c1.getArea() << "\t" << "c1的体积:" << c1.getVolume() << endl;
	cout << "c2的面积:" << c2.getArea() << "\t" << "c2的体积:" << c2.getVolume() << endl;
	cout << "c3的面积:" << c3.getArea() << "\t" << "c3的体积:" << c3.getVolume() << endl;
	Judge(c1, c2);
	Judge(c1, c3);
	Judge(c2, c3);
	system("pause");
	return 0;
}

#include <iostream>

using namespace std;
//设计一个圆类和点类,计算圆和点的关系

class Point
{
private:
	int px;
	int py;

public:
	void setPXY(int x,int y)
	{
		px = x;
		py = y;
	}

	int getPX()
	{
		return px;
	}

	int getPY()
	{
		return py;
	}
};

class Circle
{
private:
	int cx;
	int cy;
	double m_R;	//半径

public:
	void setR(double r)
	{
		m_R = r;
	}

	int getR()
	{
		return m_R;
	}

	void setCXY(int x, int y)
	{
		cx = x;
		cy = y;
	}

	int getCX()
	{
		return cx;
	}

	int getCY()
	{
		return cy;
	}

	void Judge(Point p)
	{
		double Lon = sqrt(pow((cx - p.getPX()), 2) + pow((cy - p.getPY()), 2));
		if (Lon == m_R)
		{
			cout << "点在圆上" << endl;
		}
		else if (Lon < m_R)
		{
			cout << "点在圆内" << endl;
		}
		else
		{
			cout << "点在圆外" << endl;
		}
	}
};


int main()
{
	Circle c;
	Point p1;
	Point p2;
	Point p3;
	c.setCXY(0, 0);
	c.setR(5.0);
	p1.setPXY(3, 4);
	p2.setPXY(7, 8);
	p3.setPXY(1, 2);
	c.Judge(p1);
	c.Judge(p2);
	c.Judge(p3);
	system("pause");
	return 0;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值