一、基本概念:
1、现实世界的事物所具有的共性就是每个事物都具有自身的属性,一些自身具有的行为,例如一个学生有姓名、性别、年龄等属性,吃饭睡觉玩游戏等行为。C++提供了类的概念,可以将某一类事物的所有属性和行为封装在一个class中。
2、类对于某个事物的描述其实还是抽象的,例如有一类事物有姓名、性别、年龄等属性,可以吃饭睡觉玩游戏等行为,如果只是这么描述的话其实我们是不知道这个事物具体是什么样的,因为这个类没有告诉我们每个属性具体的值是多少(这个事物的姓名是什么,年龄是多少),所以类只是对某一类事物的一个描述而已。实际应用中我们需要操作某类事物中一个或者多个具体的事物。那么这个具体的事物我们就称之为对象。
3、类是抽象的,对象是具象的。
4、对象是怎么来的呢?由类实例化而来。因此我们也说通过一个类实例化一个对象。
类的定义:
属性:变量
行为:函数、方法
class 类名
{
访问控制符:
成员变量 //属性;
成员变量 //方法
};
访问控制符有三种:public,private,protected
实例:定义一个描述一种动物
class Box
{
public:
//属性
char name[32]; //名字
int age; //年龄
//方法
void jiao(char *voice) //描述动物叫的行为,voice为叫的声音
{
cout << name << voice << endl;
}
};
类的基本使用:
对象的实例化:
1、实例化普通对象
类名 对象名称:
Box b; //b就是Box的实例化对象
2、使用数组实例化多个普通变量
类名 数组名[数组长度]
Box b[10]; //实例化10个Box的实例化对象
3、定义一个指针变量
类名 *对象名称
Box *b; //*b就是一个指针变量,可以指向一个Box的实例化对象的首地址
注意:指针变量不是类的实例化对象!本质是个指针!!也就是说定义一个类类型的指针变量根本就没有实例化一个对象
4、等等不止以上三种
成员变量和成员函数的访问:
1、普通对象
//普通对象使用据点符号(.)访问成员变量和函数
Box b;//构造一个实例化对象
b.age = 1;
b.jiao("miao miao");
2、指针变量
//指针使用->访问成员变量和成员函数
Box b;
Box *p=&b;
p->age = 1;
p->jiao("miao miao");
总结:对象中成员变量和成员函数的访问与结构体访问成员变量的方法类似。
类成员的访问控制:
1、在C++中可以给成员变量和成员函数定义访问级别。
- public 公有的,
//类成员:访问控制符、、共有的修饰成员变量和成员函数可以在类的内部和外部被访问
- private 私有的,
//私有的,修饰成员变量和成员函数只能在类的内部被访问到
- protected 私有的
//私有的,修饰成员变量和成员函数只能在类的内部被访问到
在私有访问控制下的变量和函数无法进行访问,
思考:为什么有时候需要将成员变量或者成员函数的访问控制权设置为私有型(private/protected)?
为了保障某些属性的“安全”,我们常常将该属性定义为private, 对象只能通过类中的public方法访问private属性。
总工程代码
#include <iostream> #include "Cstring" using namespace std; //定义一个类 class Canimal { public://类成员:访问控制符、、共有的修饰成员变量和成员函数可以在类的内部和外部被访问 //属性: char name[32];//名字 int age=0;//年龄 //方法 void jiao(const char *voice) { cout << name << ":" << voice << endl; } void set_age(int age) { if(age>150 || age<0)//函数的形参的合法值检查 { cout <<"error age:"<<age<<endl; } _age = age; cout <<"set_age:"<<_age<<endl; } //private //私有的,修饰成员变量和成员函数只能在类的内部被访问到 //protected //私有的,修饰成员变量和成员函数只能在类的内部被访问到 //为了保障某些属性的“安全”, //我们常常将该属性定义为private, 对象只能通过类中的public方法访问private属性, private: int _age=0; char _sex='M'; }; int main() { //实例化一个普通对象 Canimal cat; //通过数组实例化多个对象 Canimal cats[10]; //定义指针变量 Canimal *p; p = &cat; cout << cat.age << endl; cat.age=1; cout << cat.age << endl; p->age=2; cout << p->age << endl; cout << cat.age << endl; //将name内的赋值为\0 memset(cat.name,0,sizeof(cat.name)); strcpy(cat.name,"xiaohuamao"); cat.jiao("miao maio"); cout << cat.name << endl; //类成员的访问控制 cat.set_age(50); //cout << cat._age <<endl;会报错“is private within this context”无法进行访问 return 0; }