- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
当用一个类的对象去初始化该类的另一个对象时 int main(void) { box A(1,2 ,3); Point B(A); //拷贝构造函数被调用 coutB.volume()endl; return 0; } 若函数的形参为类对象,调用函数时,实参赋值给形参,系统自动调用拷贝构造函数。 void fun1(box p) { coutp.volume()endl; } int main() { box A(1,2,3); fun1(A); //调用拷贝构造函数 return 0; } 若函数的返回值是类的对象,函数返回对象时 box fun2() { box A(1,2,3); return A; //调用拷贝构造函数 } int main() { box B; B=fun2(); return 0; } 复制构造函数 如果程序员没有为类声明复制构造函数,则编译器自己生成一个复制构造函数。 这个构造函数执行的功能是:用作为初始值的对象的每个数据成员的值,初始化将要建立的对象的对应数据成员。 3.9 静态成员 同类的不同对象,其数据成员可不同,需要每个对象拥有独立的数据成员空间存放这些不同的值。 如果希望在同类的多个对象的某个或某些数据成员是相同的,为多个对象所共有,从而实现数据的共享,可用静态的数据成员来实现。 例如,在box类中若希望所有对象都有一个相同height值,就可以将height定义为静态成员。 静态成员分为静态数据成员和静态成员函数。 静态数据成员 与非静态数据成员不同,静态数据成员属于类的所有对象。 静态数据成员在所有对象之外单独开辟空间,而不随对象分配空间。 也就是说,静态数据成员所占的内存空间不在任何一个类对象空间中。因此无论创建多少个该类的对象,静态数据成员在内存中都只有一个,但可以被对象所引用。 在类中声明静态数据成员的方法是: static 数据类型 静态数据成员名; 使用静态数据成员的几点说明 1、静态数据成员属于类的所有对象,而不像非静态数据成员那样属于某一个对象,是整个类的属性。因此访问静态数据成员的形式通常采用: 类名::数据成员名。例如,Student::count C++ 编译器也允许采用通过对象名访问静态数据成员的形式: 对象名.数据成员名。例如,Student1.count 使用静态数据成员的几点说明 2、类中声明的静态数据成员既不能随着对象创建被定义和初始化,也不能在类定义中进行定义和初始化,而必须在类定义外,并且在该类的任何对象创建之前,提供初始化定义。一般形式为: 数据类型 类名::静态数据成员名= 初值; 例如为Student::count 提供初始化定义语句: int Student::count = 0; 注意:不能用参数初始化表对静态数据成员初始化;如果只定义不赋初值,则被缺省设置为零。 使用静态数据成员的几点说明 3、静态数据成员与其他静态变量一样,是在程序开始时创建并被初始化 ,到程序结束时才释放空间。它在该类的任何对象被建立之前就存在,因此它可以在程序中不依赖对象被访问。 4、C++ 使用静态数据成员的一个主要原因是可以避免使用全局变量实现同类不同对象成员函数对数据的共享。使用全局变量的类都是违反面向对象的程序设计的封装原则的。 P103例3.10 class box { public: box(int,int); int volume(); static int height; int width; int length; }; 静态成员函数 成员函数在声明的前面加static就成为静态成员函数。 静态成员函数是类的一部分,而不是对象的一部分,独立于对象而存在,与任何对象无关。 如果要在类外调用公用的静态成员函数,要用类名和域运算符“::”,也可通过对象调用静态成员函数,如对象名.静态成员函数名()。 与静态数据成员不同,静态成员函数的作用不是提供对象之间数据的共享,而是为了处理静态数据成员。 静态成员函数可以直接引用本类中的静态数据成员. 静态成员函数 静态成员函数中没有隐含的this指针。不能对非静态数据成员进行默认访问,即在访问时不指定对象名。因为无法确定这些非静态数据成员来自哪个对象。 假如在box类中一静态成员函数中有以下语句: coutheightendl; //如果height已声明为static,合法 coutwidthendl; // 非法 在静态成员函数中可以引用本类的的非静态成员,格式: 对象名.成员名 P105页例3.11 class student { public: s
文档评论(0)