目录
访问的三个权限:public private protect
C++面向对象的三大特性:封装、继承、多态
封装的意义:
1.将属性和行为一个整体,表现事物
2.将属性和行为加以权限
语法 class 类名{访问权限:属性/行为};
实例1:
#include<iostream>
using namespace std;
const double PI=3.14;
class Circle //圆类
{
public:
//属性
int m_R;//半径
//行为
double calculateZC()//获取半径
{
return 2 * PI * m_R;
}
};
int main()
{
Circle C1;//利用类实例化创建圆对象
C1.m_R = 10;//属性赋值
cout <<"周长为" << C1.calculateZC() << endl;//输出:周长为62.8
return 0;
system("pause");
}
实例2:
#include<iostream>
#include<string>
using namespace std;
const double PI=3.14;
class Student //学生类
{
public:
//属性(成员)
string m_name;//姓名
int m_ID;//学号
//行为(成员函数)
void Print()//输出信息
{
cout << "姓名:" << m_name << ";学号:" << m_ID << endl;
}
void setname(string name)//给姓名赋值
{
m_name = name;
}
};
int main()
{
Student stu;//利用类实例化创建学生对象
stu.m_name = "张三";//属性赋值
stu.m_ID = 10000;
stu.Print();//姓名:张三;学号:10000
stu.setname("李四");
stu.Print();//姓名:李四; 学号:10000
return 0;
}
访问的三个权限:public private protect
1.公共public 成员 类内可以访问,类外也可以
2.私有private 成员 类内可以访问,类外不可以 继承中儿子不可以访问
3.保护protected 成员 类内可以访问,类外不可以 继承中儿子可以访问
#include<iostream>
#include<string>
using namespace std;
class Man //学生类
{
public://属性(成员)
string m_name;//姓名
private:
string m_password;
protected:
string m_ID;//学号
public://行为(成员函数)
void set()//给姓名赋值
{
m_name ="张三";
m_ID =123;
m_password =7811515;
}
};
int main()
{
Man p;//利用类实例化创建学生对象
p.m_name = "李四";
//p.m_ID=456789;不合法
return 0;
system("pause");
}
class与struct的区别:
struct默认权限共有
class默认权限私有
class Man //学生类
{
string m_password;//默认私有
};
成员属性私有化
优点1:成员属性设置为私有,自己可以控制读写权限
有点2:对于读写权限,我们可以检测数据的有效性
#include<iostream>
#include<string>
using namespace std;
class Man //人类
{
private:
string m_name;//姓名(预期设置:可读可写)
int m_Age;//年龄(只读)
long long m_Id;//身份证号(只写)
public:
void setname(string name)//姓名写
{
m_name = name;
}
string getname()//获取姓名
{
return m_name;
}
int getage()//只读
{
m_Age = 10;
return m_Age;
}
void setID(long long ID)
{
m_Id = ID;
}
void print()
{
cout << m_Id;
}
};
int main()
{
Man m1;
m1.setname("张三");
//m1.m_Age = 18;不合法(类外私有不能直接访问)
m1.setID(123456789445);
cout << m1.getname() << endl;
cout << m1.getage() << endl;//输出10
//m1.print();检测m_ID是否设置成功
return 0;
system("pause");
}
实例:
#include<iostream>
#include<string>
using namespace std;
class Point//点类
{
private:
int m_x;
int m_y;
public:
void set(int x, int y){
m_x = x; m_y = y;
}
int getx(){
return m_x;
}
int gety(){
return m_y;
}
};
class Circle //圆类
{
private://成员
int m_R;//半径
Point m_Center;//圆心
public://成员函数
void setR(int r) {
m_R = r;
}
int getR()//设置半径
{
return m_R;
}
void setCenter(Point center) //设置圆心
{
m_Center = center;
}
Point getCenter()
{
return m_Center;
}
};
//判断点和圆的位置关系
void isIN(Circle& c, Point& p)
{
//计算距离的平方
int d=(c.getCenter().getx() - p.getx())*(c.getCenter().getx() - p.getx())+
(c.getCenter().gety() - p.gety())* (c.getCenter().gety() - p.gety());
if (c.getR() * c.getR() > d)
cout << "点在圆内" << endl;
else if (c.getR() * c.getR() ==d)
cout << "点在圆上" << endl;
else if (c.getR() * c.getR()<d)
cout << "点在圆外" << endl;
}
int main()
{
Point center,p1,p2,p3;
center.set(10,0);p1.set(10, 9); p2.set(10, 10); p3.set(10, 11);
Circle c1;
c1.setCenter(center);
c1.setR(10);
isIN(c1, p1); //点在圆内
isIN(c1, p2); //点在圆上
isIN(c1, p3);//点在圆外
return 0;
system("pause");
}