c++面向对象的三大特性为:封装、继承、多态
c++认为万事万物皆为对象,对象上有其属性(成员变量)和行为(成员方法)
例如:人可以作为对象,属性有姓名、年龄......., 行为有走、跑、吃饭..........
- 封装
- 封装的意义
- 将属性和行为作为一个整体,表现生活中的事物
- 将属性和行为加以权限控制
- 语法
- 语法:class 类名{ 访问权限:属性 / 行为 };
- 实例化(通过一个类创建一个对象)
- 通过 . 访问属性和行为
-
#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; }
-
-
通过行为给属性赋值
-
#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; }
-
-
-
权限
-
public 公共权限(类内可以访问,类外可以访问)
-
protected 保护权限(类内可以访问,类外不可以访问(继承时,儿子可以访问))
-
private 私有权限(类内可以访问,类外不可以访问(继承时,儿子不可访问))
-
-
struct 和 class的区别
-
struct默认权限为公共
-
class默认权限为私有
-
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;
}