知识点引入
C语言中 数据 和 方法 是独立:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 | //c语言的思想:数据 方法 分开
//人
typedefstruct
{
charname[32];
intage;
}Person;
//动物
typedefstruct
{
charname[32];
intage;
inttype;
}Dog;
voidPersonEat(Person *p)
{
cout<<p->name<<"正在吃饭"<<endl;
}
voidDogEat(Dog *d)
{
cout<<d->name<<"正在吃狗粮, 汪汪"<<endl;
}
voidtest01()
{
Person person = {"老王",43};
Dog dog={"旺财",6};
PersonEat(&person);
DogEat(&dog);
// 出现一个问题(数据 方法独立 容易造成 方法 调用错误数据)
DogEat((Dog *)&person);
}
|
![]()
类的初识
1、封装
把变量(属性)和函数(操作)合成一个整体,封装在一个类中
对变量和函数进行访问控制(公有、私有、保护)
类的封装:将数据和方法封装在一起 加以权限区分 用户只能通过公共方法 访问私有数据。
2、权限
private私有 public公有 protected保护
private私有:类外部不可直接访问私有数据 类内部可以访问
protected保护:类外部不可直接访问私有数据 类内部可以访问
public公有:类外部可以访问私有数据 类内部可以访问
权限只是针对 类的外部 , 类的内部 没有权限之分
class 类名{//抽象的概念 系统不会为其分配空间
private://私有 类的外部 不可直接访问
protected://保护 类的外部 不可直接访问
数据
public://公有 类的外部 可以直接访问
方法
//在类的内部 没有权限之分 都可以相互访问
};
案例:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 | classPerson//抽象的概念
{//类的内部
private:
intm_money;//私有数据
protected:
intm_age;
public:
voiddese()
{
m_money = 100;
m_age = 18;
cout<<"我有房 有车 又年轻"<<m_age<<"岁又有钱"<<m_money<<"万美金 我就爱嘚瑟"<<endl;
}
};
voidtest01()
{
//用类 去 实例化 一个对象(就是用Person定义一个变量)
Person lucy;
//cout<<"兄弟你的钱:"<<lucy.m_money<<endl;//err 内的外部不可访问
//cout<<"兄弟你的年龄:"<<lucy.m_age<<endl;//err 内的外部不可访问
lucy.dese();//ok 公有的类的外部可用访问
//private protected虽然是私有、保护的 类外不可访问 但是用户可以借助 public公有的方法
//间接的访问私有、保护的数据
}
|
class默认是私有的 数据私有 方法公有 用户就可以借助 公有方法 间接的操作 私有数据
3、类的定义(定义类型)
关键字 class
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 | #include <iostream>
usingnamespacestd;
//类的定义:是不占空间 只有用类实例化 对象的时候 系统为对象开辟空间
classData
{
private://私有
// int a=10;//err 定义类的时候 尽量不要 给成员赋值
inta;//成员 数据
protected://保护
intb;
public://公有
intc;
//成员函数
voiddata_show(void)
{
//类的内部:没有权限区分
cout<<a<<", "<<b<<", "<<c<<endl;
}
};
//类中的数据成员 拥有 独立的空间
voidtest01()
{
//使用Data实例化一个对象名为ob的对象
Data ob;
//成员数据依赖于对象的
//cout<<" ob.a = "<<ob.a<<endl;//err a为私有 类外不能直接访问
//cout<<" ob.b = "<<ob.b<<endl;//err b为保护 类外不能直接访问
cout<<" ob.c = "<<ob.c<<endl;//err c为公有 类外可以直接访问
//对象 通过公共方法 间接调用私用数据
ob.data_show();
}
intmain(intargc,char*argv[])
{
test01();
return0;
}
|
4、类的成员函数与类中声明及类外定义
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 | classData2
{
//默认为私有
inta;
public:
//类中声明 类外定义
voidsetA(intv);
intgetA(void);
};
voidData2::setA(intv)
{
a = v;
return;
}
intData2::getA()
{
returna;
}
voidtest02()
{
Data2 ob;
ob.setA(100);
cout<<"a = "<<ob.getA()<<endl;
}
|
![]()
Person类的设计
设计一个Person类型
设计一个Person类,Person类具有name和age属性,提供初始化函数(Init),并提供对name和age的 读写函数(set,get),但必须确保age的赋值在有效范围内(0-100),超出有效范围,则拒绝赋值,并提供 方法输出姓名和年龄。
person.h:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 | #ifndef PERSON_H
#define PERSON_H
//类的头文件:一般定义成员数据 声明成员函数
classPerson
{
private:
charm_name[32];
intm_age;
public:
//初始化m_name m_age
voidinit(char*name,intage);
//设置name
voidsetName(char*name);
//获取name
char*getName(void);
//设置age
voidsetAge(intage);
//获取age
intgetAge(void);
//显示m_name m_age
voidshowPerons(void);
};
#endif // PERSON_H
|
person.cpp:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 | #include "person.h"
//#include <string.h>
#include<cstring>
#include<iostream>
usingnamespacestd;
//定义类的成员函数
voidPerson::init(char*name,intage)
{
strcpy(m_name, name);
if(age>=0 && age<=100)
{
m_age = age;
}
else
{
cout<<"年龄输入非法"<<endl;
}
}
voidPerson::setName(char*name)
{
strcpy(m_name, name);
return;
}
char*Person::getName()
{
returnm_name;
}
voidPerson::setAge(intage)
{
if(age>=0 && age<=100)
{
m_age = age;
}
else
{
cout<<"年龄输入非法"<<endl;
}
return;
}
intPerson::getAge()
{
returnm_age;
}
voidPerson::showPerons()
{
cout<<"姓名:"<<m_name<<", 年龄:"<<m_age<<endl;
return;
}
|
main.cpp
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | #include <iostream>
#include "person.h"
usingnamespacestd;
intmain(intargc,char*argv[])
{
Person ob;
ob.init("lucy", 18);
ob.showPerons();
ob.setName("bob");
cout<<"姓名:"<<ob.getName()<<endl;
ob.setAge(19);
cout<<"年龄:"<<ob.getAge()<<endl;
return0;
}
|
设计立方体类
设计立方体类(Cube),求出立方体的面积( 2ab + 2ac + 2bc )和体积( a * b * c),分别用全局函数和成员 函数判断两个立方体是否相等