二、C++类的声明
类使用class关键字声明,声明方法如下:
class 类名:
{
public://公有成员
int num;
private:私有成员
int age;
protected:保护成员
int sex;
};
三、类的属性public、private和protected
- 类的public成员可以被任意实体访问,你可以认为它就是c语言中的struct结构体,可以直接用a.x这种形式访问;
- 类的private成员不能直接被类的实体访问,也不能被子类的实体访问,但是可以被类的成员函数访问;
- 类的protected成员不能直接被类的实体访问,但是可以被子类访问,也可以被类的成员函数访问;
假设有如下类:
class A
{
public:
int age;
private:
int weight;
protected:
int hight;
};
3.1、首先我们尝试访问class A中的public成员:
int main()
{
class A personA;
class B personB;
personA.age = 16;
cout<<"personA age = "<<personA.age<<endl;
}
执行G++ class.cpp后执行./a.out得到的运行结果如下,从结果可以看出我们可以直接访问public成员变量:
3.2、接下来我们尝试直接访问private和protected的成员
int main()
{
class A personA;
class B personB;
personA.weight = 16;
personA.hight = 200;
}
执行结果如下,系统提示weight变量为private私有,hight变量为protected被保护,均不能被访问。
3.2、可以在public成员中定义函数改变private和protected的数据
class A
{
public:
int age;
void SetWeight(int x){weight = x;}
void SetHight(int x){hight = x;}
int GetWeight(){return weight;}
int GetHight(){return hight;}
private:
int weight;
protected:
int hight;
};
int main()
{
class A personA;
class B personB;
personA.SetWeight(16);;
personA.SetHight(200);
cout<<"personA weight = "<<personA.GetWeight()<<endl;
cout<<"personA hight = "<<personA.GetHight()<<endl;
}
执行结果:
四、类的成员函数
类的成员函数,说白了就是定义在类中的函数,我们可以用访问类变量相同的方法访问类的成员函数。类的成员函数可以对类内部的protected数据和private数据进行访问。
4.1、类的成员函数声明方法
- 类的成员函数可以直接在类的内部声明,这适用于函数相对简短的情况;
class A
{
public:
int age;
void SetWeight(int x){weight = x;}//类的成员函数,设置private数据
void SetHight(int x){hight = x;}//类的成员函数,设置protected数据
int GetWeight(){return weight;}
int GetHight(){return hight;}
private:
int weight;
protected:
int hight;
};
- 类的成员函数可以在类的内部声明,在类的外部定义,格式如下:
返回类型 类名::函数名(函数参数)
class A
{
public:
int age;
void SetWeight(int x);
void SetHight(int x);
int GetWeight(){return weight;}
int GetHight(){return hight;}
private:
int weight;
protected:
int hight;
};
void A::SetWeight(int x)
{
weight = x;
}
void A::SetHight(int x)
{
hight = x;
}
五、类占用的内存
- c++类占用的内存计算方法和c语言中的结构体计算方法相同,占用空间总大小等于其所有成员占用空间的总和;
- 类中的成员函数不占用类的空间;
#include <iostream>
using namespace std;
class A
{
public:
int age;//4byte
void SetWeight(int x){weight = x;}
void SetHight(int x){hight = x;}
int GetWeight(){return weight;}
int GetHight(){return hight;}
private:
int weight;//4byte
protected:
int hight;//4byte
};
class B:public A
{
public:
int GetPersonAHight(){return hight;}
};
int main()
{
class A personA;
class B personB;
personA.SetWeight(16);;
personA.SetHight(200);
cout<<"sizeof(class A) = "<<sizeof(class A)<<endl;
}
运行结果:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)