我重生了,这篇文章就深入的探讨C++中的类和对象。
一.类的引入和定义
类的引入:在C语言中,结构体内部只能定义变量或者结构体,C++中对结构体进行了升级->类,C++的类中既可以定义变量,又可以定义函数。类中的变量叫做属性或者成员变量;函数叫做成员函数或者方法。类是属性及操作属性的方法的一个封装。
类的定义:
class classname
{//类体
//属性
//操作属性的一些方法
};//注意,这里有分号
类的方法声明和定义也可以分离:
//main.h
class A
{
int a;
int b;
void func();//成员函数声明
};
//main.cpp
void A::func()//成员函数的定义
{
cout<<"func()"<<endl;
}
当成员函数的声明与定义分离,定义时成员函数名前必须加上 类名:: 来限定这个定义的函数是这个类里面的。
成员变量命名习惯:成员变量的命名一般在名字前加上 _ 例如
int _a;
二.访问限定符和类的封装性
class classname
{
private:
int _date;
public:
void ModifyDate(int date)//通过共有成员函数来访问类的成员变量(属性)
{
_date=date;
}
};
三.类的实例化
类可以直接使用吗?答案是否定的。定义出一个类并没有分配实际的内存空间,要想使用这个模板,需要用类创建对象(申请空间),我们可以使用这个对象。这就是类的实例化的过程。
一个类可以创建任意多的对象,每一个对象都是基于这个类的模板实例化出来的,每个对象又互不干涉,都是独立的个体。
#include<iostream>
using namespace std;
class People
{
private://私有域
int _age;
int _height;
public://公有域
void eat()
{
cout << "吃饭" << endl;
}
void sleep()
{
cout << "睡觉" << endl;
}
};
int main()
{
People man;//用类创建对象,类的实例化
man.eat();//实例化后使用对象
return 0;
}
四.类的大小
类的大小如何计算呢?
cout << sizeof(man) << endl;
cout << sizeof(People) << endl;
这里要说明,由于同一个类不同对象的成员函数功能是相同的,所以成员函数存放在公共代码区,对象内只存放成员变量。即对象大小就是成员变量大小的总和(注意内存对齐)。
五.this指针
思考这样一个问题:
#include<iostream>
using namespace std;
class People
{
private://私有域
int _age;
int _height;
public://公有
void inti(int age,int height)
{
_age=age;
_height=height;
}
};
int main()
{
People p1;
People p2;
p1.inti(20,170);
p2.inti(25,175);
return 0;
}
People类中的inti成员函数既然在公共代码区,函数体中没有关于不同对象的区分,那么inti是如何区分给p1的成员变量初始化还是给p2对象的成员变量初始化呢? p1调用inti函数时,该函数如何知道应该设置p1对象还是p2对象呢?
void inti(int age,int height)
{
_age=age;
_height=height;
}
其实是:
void inti(People* this,int age,int height)
{
_age=age;
_height=height;
}
而
p1.inti(20,170);
其实是:
inti(&p1,20,170);