一.类和对象的基本概念
1.任何事物都有属性,行为;例如一个学生有名字、性别、年龄等属性,吃饭睡觉等行为。C++提供了类的概念,可以将某事物的所有属性和行为封装在一个Class中。
2.类对于某个事物的描述其实还是抽象的,例如人类有姓名、性别等属性,可以吃饭上班打游戏等行为,但是这只是描述的话其实我们不知道这个事物具体时什么样的,因为这个类没有告诉我们每个属性具体的值是多少,所以类只是对某一类事物的一个描述而已。实际应用中我们需要操作某类事物中一个或多个具体的事物。那么这个具体的事物我们就称之为对象。
3.类是抽象的,对象是具象的。
4.对象是怎么来的呢?有类实例化而来。因此我们也说通过一个类实例化一个对象。
二、类的定义
属性:变量
行为:函数/方法
class 类名
{
访问控制符: //public、private、protected
成员变量 //属性
成员函数 //行为
};
实例:定义一个类描述一个动物
class CAnimal //类名的首字母一般大写
{
//访问控制符
public:
//属性
char name[32];
int age;
//方法
void cry(char *voice) //描述动物的行为
{
//在成员函数中可以直接访问成员变量
cout<<name<<voice<<endl;
}
};
C++类对象中的成员变量和成员函数是分开存储的
普通成员变量:存储于对象中,于struct变量又相同的内存布局和字节对齐方式
静态成员变量:存储于全局数据区中
成员函数:存储于代码段中
三、类的基本使用
class CAnimal
{
//访问控制符
public:
//属性
char name[32];
int age;
//方法
void cry(char *voice) //描述动物的行为
{
//在成员函数中可以直接访问成员变量
cout<<name<<voice<<endl;
}
};
int main() {
//实例化普通对象
CAnimal cat;
//通过数组实例化多个对象
//CAnimal cats[10];
//定义指针变量
CAnimal *p;
p = &cat;
cat.age =1;
cout<<cat.age<<endl;
p->age =2;
cout<<cat.age<<endl;
cout<<p->age<<endl;
//初始化name数组
memset(cat.name,0,sizeof (cat.name));
strcpy(cat.name,"Tom");
cat.cry("mi mi");
cout<<cat.name<<endl;
return 0;
}
四、类成员的访问控制
1、在C++中可以给成员变量和成员函数定义访问级别
·public 共有的,修饰成员变量和成员函数可以在类的内部和类的外部被访问
·private 私有的,修饰成员变量和成员函数只能在类的内部被访问
·protected 被保护的,修饰成员变量和成员函数只能在类的内部被访问
using namespace std;
class Teacher
{
public:
char name[20];
private:
int _age;
cahr _sex;
};
int main()
{
Teacher t;
strcpy(t.name,"Tony");
//t._age = 30; //err,age is private
return 0;
}
2.如何更加合适使用访问控制:通过函数操作private里的变量
using namespace std;
class Teacher
{
public:
char name[20];
void set_age(int age) //设置_age属性
{
_age = age; //在类的内部访问private成员变量
}
int get_age()
{
return _age;
}
private:
int _age;
cahr _sex;
};
int main()
{
Teacher t;
strcpy(t.name,"Tony");
t.set_age(30); //设置age
cout<<t.get_age()<<endl; //得到age
return 0;
}