学习C++的都知道,C++有三大特征:封装、继承和多态
1、类和对象的关系
类和对象之间的关系就可以看作是现实生活中,对物体的描述与物体的实体之间的关系,实体经过抽象处理之后就是ADT,ADT对应C++中的类,对象就是类的实例化。
抽象数据类型(ADT)是一个实现包括储存数据元素的存储结构以及实现基本操作的算法。
我们通过一段代码来说明:
#include<iostream>
class student //类名为student
{
char *name;
char *id;
int age;
void study()
{
std::cout<<"learing"<<std::endl;
}
void eat()
{
std::cout<<"eating"<<std::endl;
}
};
int main()
{
student zhangsan; //zhangsan 就是一个对象
return 0;
}
上面可以看出,student就是类,张三就是对象,name,id,age就是成员变量,study(),eat()就是成员方法,对应在现实生活中就是,student是学生的统称,张三就是一个学生实体,name,id,age就是张三的属性,study(),eat()就是张三的行为。
2、C++中的三个访问限定符public\protected\private
在类中所有的成员方法和成员变量都有访问限制符来修饰。如果不做修饰,默认都是private。这里要重点提一下:在类中访问限定符默认是私有的,即private,结构体中默认为共有的即public
public修饰的成员变量和方法在任意位置都能访问。
protected修饰的成员变量和方法只能在本类和其子类类中访问。
private修饰的成员变量和方法只能在本类类中访问。
访问限定符修饰的范围是,从访问限定符到下次访问限定符出现的地方,或者到类结束。
我们以一段代码来演示。
#include<iostream>
class student
{
char *name;
char *id;
int age;
void study()
{
std::cout<<"learing"<<std::endl;
}
void eat()
{
std::cout<<"eating"<<std::endl;
}
};
int main()
{
student zhangsan;
zhangsan.name;
return 0;
}
可以看出在类中未使用访问限定符,编译器显示成员不可访问。就是因为默认所有成员的都是私有的,只能在类内访问。
#include<iostream>
class student
{
private:
char *name;
char *id;
int age;
public:
void study()
{
std::cout<<"learing"<<std::endl;
}
void eat()
{
std::cout<<"eating"<<std::endl;
}
};
int main()
{
student zhangsan;
zhangsan.age;
zhangsan.eat();
return 0;
}
可以看出在加了访问修饰限定符之后,zhangsan.eat()就可以访问成功,但是zhangsan.age人就访问失败,只因为eat是public修饰的,而age是private修饰的。