用文件传输协议登录网站,远安网站建设,网页版传奇有哪些,域名注册免费平台类的实例化
class Date
{
public:void Init(int year, int month, int day){_year year;_month month;_day day;}private:int _year;int _month;int _day; //这只是函数的一个声明并没有定义
};上面是一个类#xff0c;我们可以把有花括号括起来的叫做一个域#xff…类的实例化
class Date
{
public:void Init(int year, int month, int day){_year year;_month month;_day day;}private:int _year;int _month;int _day; //这只是函数的一个声明并没有定义
};
上面是一个类我们可以把有花括号括起来的叫做一个域所以我们叫可以叫上面的Date叫类域 既然是域那我们可以用访问域的方法来访问上面的类域吗 我们试一试
我们输入Date::_year;
发现编译器会报错。
这是为什么
因为类中:只是变量的一个声明而已并不是变量的定义。 变量的定义会开空间而只是声明则不会开辟空间 所以我们定义一下就可以解决这个问题
那什么时候才是定义呢
Date d
这样就行了对象的定义也就叫对象的实例化
这样就会开空间出来。
下面我们思考一个问题类Date 和类实例化后的对象d1 所占的空间是多少
#includeiostream
using namespace std;
class Date
{
public:void Init(int year, int month, int day){_year year;_month month;_day day;}private:int _year; //int 整型 4个字节int _month;int _day;
};int main()
{Date d1;d1.Init(2023, 7, 9);Date d2;cout sizeof(Date) endl;cout sizeof(d1) endl;return 0;
}答案是12 还是 16 ? 你会感到疑惑private中的三个整型加起来就是12了还有一个函数呢难道函数不死存放在这个类里面的吗 是的为了避免空间的浪费会把函数存在公共的代码区 判断一下下面的类有多少个字节
//类中既有成员函数又有函数变量
class A1 {
public:void f1() {}
private:int _a;
};// 类中仅有成员函数
class A2 {
public:void f2() {}
};
// 类中什么都没有---空类
class A3
{};用sizeof 输出的结果是
cout sizeof(A1) endl;cout sizeof(A2) endl;cout sizeof(A3) endl;为啥你说A1是4都还好理解但是A2,A3是怎么回事 之前说过成员函数不是存放在类里面的所以A2中有个成员函数不影响。 A2 和 A3 的字节数是一样的但是为什么是1 不是 0 ? A3 中啥都没有呀 因为 这一个字节是用来占位 的。c 针对这种没有成员变量的类给它分配了一个字节用来占位, 这一个字节并不是用来存储数据的只是表示这个类存在过。