C++类和对象
C++认为万事万物都皆为对象,对象上有其属性和行为。
类和对象是C++中最重要的部分
面向对象的三大特性:封装,继承,多态。
1.封装
封装的意义:1.将属性和行为作为一个整体,表现生活中的事务;2.将属性行为加以权限控制
封装的语法:
class 类名
{
访问权限:
属性;
行为;
};
例子:设计一个圆类,求圆的周长;
#include <iostream>
//设计一个圆类,求圆的周长
using namespace std;
const double PI=3.14;//圆周率
class circle//类名自定义
{
public://访问权限
int r;//属性
//行为 通常是用函数来代表
double zhouchang()//求周长
{
return 2*PI*r;//返回周长
}
};
int main()
{
//通过圆类 创建一个具体的对象;
circle c1;//通过circle这个类创建一个c1这个对象
//设计半径:
c1.r=20;//通过 . 来访问属性
cout<<"圆的周长为" <<c1.zhouchang()<<endl;
}
练习:设计一个学生类,属性有姓名和学号。可以给姓名和学号赋值,可以显示学生的姓名和学号。
#include <iostream>
//设计一个学生类,属性有姓名和学号
//可以给姓名和学号赋值,可以显示学生的姓名和学号
using namespace std;
class Student
{
public:
string name;
int ID;
void show()//显示信息
{
cout<<"姓名"<<name<<"学号"<<ID<<endl;
}
};
int main()
{
//创建学生对象(实例化) 并给属性赋值
Student s1;
s1.name="Tony";
s1.ID=123;
s1.show();
Student s2;
s2.ID=321;
s2.name="Liu";
s2.show();
}
除了以上的赋值方法,还有另外一钟赋值方法:可以通过行为来给属性进行赋值操作:
void set(…)
#include <iostream>
//设计一个学生类,属性有姓名和学号
//可以给姓名和学号赋值,可以显示学生的姓名和学号
using namespace std;
class Student
{
public:
//类中的属性和行为 成为成员
//属性:成员属性和成员变量
//行为:成员函数和成员方法
//属性:
string m_name;
int m_ID;
//行为:
void show()//显示信息
{
cout<<"姓名"<<m_name<<"学号"<<m_ID<<endl;
}
//给姓名赋值
void setName(string name)
{
m_name=name;
}
void setID(int id)
{
m_ID=id;
}
};
int main()
{
//创建学生对象(实例化) 并给属性赋值
Student s1;
s1.setName("Tony");//调用函数
s1.setID(123);
s1.show();
}
封装的意义二:
类在设计时,可以把属性和行为放在不同的权限下,加以控制
访问权限有三种:
1.public 公共权限
2.protected 保护权限
3.private 私有权限
#include <iostream>
//权限的访问:
//public 成员 类内可以访问 类外也可以访问
//protected 成员 类内可以访问 类外不可以访问
//private 成员 类内可以访问 类外不可以访问
using namespace std;
class Family
{
//公共权限
public:
int HomeKey;//家门密码
//保护权限
protected:
int Car;//汽车
//隐私权限
private:
int CardID;//银行卡密码
private://修改这个权限在main函数中也会有所体现
void func()
{
HomeKey=123;
Car=222;
CardID=66546566;
//函数体内部可以访问
}
};
int main()
{
Family F1;
//F1.CardID=123;运行不起来的访问不到
F1.HomeKey=1111;
//F1.Car=32;运行不起来的访问不到
F1.
}
颜色不同说明访问权限不同。
struct和class 的区别
#include <iostream>
//struct 和class的区别
//struct的默认权限是public
//class的默认权限是private私有
using namespace std;
class L
{
int a=0;
};
struct L2
{
int b=2;
};
int main()
{
// L l1;
// l1.a=100;
L2 l2;
l2.b=20;
cout<<l2.b<<endl;
}
成员属性设置为私有
优点1:将所有成员设置为私有,可以自己控制读写权限
优点2:对于写权限,我们可以检测数据的有效性
#include <iostream>
//成员属性私有化
//可以自己控制读写权限
//对于写可以检测数据的有效性
using namespace std;
class Person
{
public:
//设置姓名
void setName(string name)
{
m_name=name;
}
//获取姓名
string getName()
{
return m_name;
}
//获取年龄
int getage()
{
m_age=0;//初始化
return m_age;
}
//设置年龄
void setage(int age)//对于写可以检测数据的有效性
{
if(age<0||age>150)
{
cout<<"cuowu"<<endl;
}
m_age=age;
}
//只写KEY
void setkey(int key)
{
m_key=key;
}
private:
string m_name;//设置一个可读可写
int m_age;//设置一个可读不写
int m_key;//设置一个不读可写
};
int main()
{
Person p1;
p1.setName("Tony");
cout<<p1.getName();
p1.setkey(2222);
p1.setage(1600);
p1.getage();
}