公司网站销售怎么做的,成都网站设计报告书,一般通过什么判断鱼的年龄,建设学校网站方案类是c的独特形式#xff0c;可以在类中包括函数进行。对象是通过类创建的一个个变量。类的存储类中的每一个类中的函数#xff0c;不存入类的内存。如图定义了一个类#xff0c;有一个int类型#xff0c;4字节。一个函数无内存。类的存储的大小还要看对齐数对齐数#xff…类是c的独特形式可以在类中包括函数进行。对象是通过类创建的一个个变量。类的存储类中的每一个类中的函数不存入类的内存。如图定义了一个类有一个int类型4字节。一个函数无内存。类的存储的大小还要看对齐数对齐数对齐数默认的数和类内的成员变量的大小的较小值每一个类成员都有一个对齐数。内存大小为成员变量的对齐数最大值的整数倍vs对齐数默认是8如果是类嵌套取嵌套中的最大对齐数。原因1平台问题有些硬件平台只能取特定类型的数据。cpu不能从任意位置开始读只能从整数倍开始不能读任意字节只能读固定字节。如下图4的整数倍开始读一次性读取4字节。2性能原因处理器处理未对齐的需要两次对齐的只需要1次。如果定义的类没有内容内存为1字节证明存在。成员变量没有内容也会给1字节证明有这个成员。c定义了一个this指针作为。隐藏在类中的函数的一个参数指向自身不可修改。#includeiostream #includestring using namespace std; class jst{ public: int a; //void print(jst* const this) void print( ){ coutaendl; } }; class st1{ }; class st2{ st1 a; st1 b; }; int main(){ jst s; s.a10; s.print(); //s.print(s); coutsizeof(st1)endl; coutsizeof(st2)endl; return 0; }类中直接访问用.通过指针访问用-。不能自己显示的写this指针。可以在函数体内可以用。this指针存储到栈中。#includeiostream #includestring using namespace std; class jst{ public: void print(){ cout666endl; } }; int main(){ jst* snullptr; s-print(); return 0; }可以正常运行因为函数没有存在类中调用后只传了s的地址。在c的类中可以把不同的数据封装到不同的区防止胡乱调用。如下面的代码只能通过jst中的函数进行操作。实现不能直接操作s.a必须间接操作。#includeiostream #includestring using namespace std; class jst{ public: void push(int n,int m){ a[n]m; } void print(int n){ couta[n]; } private: int a[4]; }; int main(){ jst s; s.push(0,1); s.print(0); return 0; }默认成员函数在类中如果你没有创建编译器自动生成的函数还有两个移动构造移动赋值。初始化和清理。构造函数初始化工作。析构函数清理工作。拷贝复制 拷贝构造是使用同类对象初始化创建对象。赋值重载把一个对象赋值给另一个对象。取地址重载 普通对象和const对象的取址构造函数函数名和类名相同。无返回值。不需要写void。对象创建时自动调用。构造函数可以重载。无参#includeiostream #includestring using namespace std; class jst{ public: jst(){ a[0]1; a[1]2; a[2]3; a[3]4; } void print(){ couta[0] a[1] a[2] a[3]; } private: int a[4]; }; int main(){ jst s; s.print(); return 0; }带参在创建时跟在创建末尾。#includeiostream #includestring using namespace std; class jst{ public: jst(int q,int w,int e,int r){ a[0]q; a[1]w; a[2]e; a[3]r; } void print(){ couta[0] a[1] a[2] a[3]; } private: int a[4]; }; int main(){ jst s(2,3,4,5); s.print(); return 0; }全缺省。可以自己初始。#includeiostream #includestring using namespace std; class jst{ public: jst(int q1,int w2,int e3,int r4){ a[0]q; a[1]w; a[2]e; a[3]r; } void print(){ couta[0] a[1] a[2] a[3]; } private: int a[4]; }; int main(){ jst s(0,0); s.print(); return 0; }默认构造是不用传参的就是默认构造包括无参和全缺省。默认生成2个中的一个.3个构造函数只能存在一个。看编译器生成无参函数和全缺省函数。对于自定义的类型会调用自定义的构造函数。#includeiostream #includestring using namespace std; class jst{ public: jst(){ a[0]1;a[1]2;a[2]3;a[3]4; } void print(){ couta[0] a[1] a[2] a[3]endl; } private: int a[4]; }; class jst2{ public: void print(){ a1.print(); a2.print(); } private: jst a1; jst a2; }; int main(){ jst2 s; s.print(); return 0; }一般构造函数自己写。析构函数析构函数名是在类名前加上字符~无参无返回值。一个类只有一个析构。对象结束会自动调用。如果不写会自动生成。对于自定义也会调用它的析构。#includeiostream #includestring #includecstdlib using namespace std; class jst{ public: jst(){ a(int*)malloc(sizeof(int)*4); a[0]1;a[1]2;a[2]3;a[3]4; } ~jst(){ cout0endl; free(a); } void print(){ couta[0] a[1] a[2] a[3]endl; } private: int* a; }; class jst1{ public: jst1(){ a(int*)malloc(sizeof(int)*4); a[0]1;a[1]2;a[2]3;a[3]4; } ~jst1(){ cout1endl; free(a); } void print(){ couta[0] a[1] a[2] a[3]endl; } private: int* a; }; class jst2{ public: void print(){ a1.print(); a2.print(); } private: jst a1; jst1 a2; }; int main(){ jst2 s; s.print(); return 0; }后定义的先析构。对于自定义函数总会使用自定义的析构。没有申请资源的类可以不写析构。显示写析构也会自动调用默认析构。运算符重载运算符在类中可以重载。#includeiostream #includestring #includecstdlib using namespace std; class Data{ public: Data(int year1,int yue1,int day1 ){ _yearyear; _yueyue; _dayday; } int que(int n){ if(n0n4){ if(n1) return _year; else if(n2) return _yue; else return _day; } } private: int _year;int _yue;int _day; }; bool operator(Data d1,Data d2){ return d1.que(1)d2.que(1)\ d1.que(2)d2.que(2)\ d1.que(3)d2.que(3); }; int main(){ Data t1(2,2,2); Data t2; Data t3; if(t1t2) cout666endl; else cout999endl; if(t3t2) cout666endl; return 0; } 或者 class Data{ public: Data(int year1,int yue1,int day1 ){ _yearyear; _yueyue; _dayday; } int que(int n){ if(n0n4){ if(n1) return _year; else if(n2) return _yue; else return _day; } } bool operator(Data d2){ return _yeard2._year\ _yued2._yue\ _dayd2._day; }; private: int _year;int _yue;int _day; };第二种方式使用的this指针t1.opertaor(t2),可以省略为t1t2。只能对于已有的操作符重载不能重新创建一个全新的操作符。