类与对象
类是C++的中非常重要的一个概念,也是实现面向对象程序设计的基础。
对象可以是客观世界的一个实体,对象具有属性和行为。
类是对象的抽象,对象是类的实例化。
类是用户定义好的,而对象则是类类型的一个变量。
首先来看一下如何定义一个简单地类:
class Student
{
public:
void showinfo()
{}
private:
int age;
char* name;
char* num;
};
首先来看一下成员访问限定符:
C++中共有三种成员访问限定符:public(公有),private(私有),protected(保护)
这些限定符可以在类中多次使用,限定符的作用域是从出现位置到下一个限定符之前或者是类的结束前。
比较重要的一点是,public修饰的成员可以直接从类外部进行任意访问,而private、protected修饰的成员不能够从外部进行直接访问。
如果在类的定义中没有指定为何种成员访问限定符,则系统默认是私有的限定修饰,即private限定符。
这些访问限定符也体现了C++面对对象的封装特性。
#include <iostream>
using namespace std;
class Student
{
public: //限定修饰符
Student() //构造函数
{}
void showinfo() //成员函数
{
cout << "name: " << name << endl;
cout << "num: " << num << endl;
cout << "age: " << age << endl;
}
int age; //成员变量
char* name;
char* num;
};
int main()
{
Student stu1; //定义对象stu1
stu1.name = "张三";
stu1.num = "201506020701";
stu1.age = 21;
stu1.showinfo(); //通过对象调用成员函数
system("pause");
return 0;
}
上面代码中,通过Student类定义了一个对象stu1 ,之后通过stu1调用成员函数来进行输出。
需要注意的是:
-
1. 类是不占据内存的,而对象是具体的,需要占据内存。
-
2. 类只是一个模型一样的东西,限定了类有哪些成员,定义出一个类并没有分配实际的内存空间来存储它。
-
3. 一个类可以实例化出多个对象,实例化出的对象占用实际的物理空间存储类成员变量。
下面来看看通过类定义的对象的存储方式:
因为同一个类的不同对象中的数据成员的值一般是不同的,而不同对象的成员函数的代码都是相同的的,不论调用那一个对象的成员函数的代码,其实调用的都是同样内容的代码。
所以,C++中,为了节约空间,每个对象所占据的内存只是该对象数据成员所占用的存储空间,而不包括成员函数代码所占的存储空间。当然这里也遵循内存对齐原则。
上面代码,获得该类对象所占用的内存为:12个字节。
对象数据成员存储也存在内存对齐,具体对其规则详见我之前的博客《简析结构体存储分配》。