1. #include <iostream>
  2. using namespace std;
  3. class circle
  4. {
  5. private:
  6. double r0;
  7. public:
  8. circle(double r)
  9. {
  10. r0 = r;
  11. cout << r << "调用了球体的初始化的函数\n";
  12. }
  13. circle(const circle &t){
  14. r0 = t.r0;
  15. cout << "r=" << r0 << "调用了球体的复制的函数\n";
  16. }
  17. //double get_rr(){return r;}
  18. double getArea(){
  19. cout << "球体的表面积:" << 4 * 3.14*r0*r0;
  20. return 4 * 3.14*r0*r0;
  21. }
  22. };
  23.  
  24. class Rectangle
  25. {
  26. private:
  27. double length;
  28. double width;
  29. double height;
  30. public:
  31. Rectangle(double a, double b, double c){
  32. length = a;
  33. width = b;
  34. height = c;
  35. cout << length << "," << width << "," << height << ",调用了长方体的初始化的函数\n";
  36. }
  37.  
  38. Rectangle(Rectangle &n){
  39. length = n.length;
  40. width = n.width;
  41. height = n.height;
  42. cout << height << "调用了长方体的复制函数\n";
  43. }
  44. double getArea(){
  45. return (2 * length*width + 2 * length*height + 2 * width*height);
  46. }
  47. };
  48.  
  49. class Whole
  50. {
  51. private:
  52. circle p1;
  53. Rectangle p2;
  54.  
  55. double all_area;
  56. public:
  57. Whole(circle xp1, Rectangle xp2);
  58.  
  59. };
  60. Whole::Whole(circle xp1, Rectangle xp2) :p2(xp2), p1(xp1){
  61. double area1 = 2 * p1.getArea();
  62. cout << "两个球体的表面积是:" << area1 << endl;
  63. double area2 = p2.getArea();
  64. cout << "长方体的表面积是:" << area2 << endl;
  65.  
  66. all_area = area1 + area2;
  67. cout << "输出总的表面积:" << all_area << endl;
  68. }
  69.  
  70. /*Whole::Whole(Whole &p):p1(p.p1),p2(p.p2){
  71.  
  72. all_area=p.area1+p.area2;
  73. }
  74. /*Whole::Whole(Whole &p4):p(p4.p1),p(p4.p2){
  75. cout<<"输出总的表面积:";
  76. area=p4.area;
  77. }*/
  78. int main(){
  79. double m;
  80. cout << "请输入m的值:";
  81. cin >> m;
  82. double rr = m / 2;
  83. circle xp1(rr);
  84. Rectangle xp2(2 * m, m, m);
  85. Whole(xp1, xp2);
  86. system("pause");
  87. return 0;
  88. }

对用拷贝函数,有一个非常重要的easy错误的地方:

在类中定义 一个变量时:

如我在 class  circle中定义一个 private :  double r,假设以下所有使用r ,那么程序将会识别错误,会使用 没有初始化的r,所以最好定义r0,后面传入的使用r,

以下是使用r的代码:

  1. #include <iostream>
  2. using namespace std;
  3. class circle
  4. {
  5. private:
  6. double r;
  7. public:
  8. circle(double r)
  9. {
  10. r=r;
  11. cout<<r<<"调用了球体的初始化的函数\n";
  12. }
  13. circle(circle & t){
  14. r=t.r;
  15. cout<<"r="<<r<<"调用了球体的复制的函数\n";
  16. }
  17. //double get_rr(){return r;}
  18. double getArea(){
  19. cout<<"球体的表面积:"<<4*3.14*r*r;
  20. return 4*3.14*r*r;
  21. }
  22. };
  23.  
  24. class Rectangle
  25. {
  26. private:
  27. double length;
  28. double width;
  29. double height;
  30. public:
  31. Rectangle(double a,double b,double c){
  32. length=a;
  33. width=b;
  34. height=c;
  35. cout<<length<<","<<width<<","<<height<<",调用了长方体的初始化的函数\n";
  36. }
  37.  
  38. Rectangle(Rectangle &n){
  39. length=n.length;
  40. width=n.width;
  41. height=n.height;
  42. cout<<height<<"调用了长方体的复制函数\n";
  43. }
  44. double getArea(){
  45. return (2*length*width+2*length*height+2*width*height);
  46. }
  47. };
  48.  
  49. class Whole
  50. {
  51. private:
  52. circle p1;
  53. Rectangle p2;
  54.  
  55. double all_area;
  56. public:
  57. Whole(circle xp1,Rectangle xp2);
  58.  
  59. };
  60. Whole::Whole(circle xp1,Rectangle xp2):p2(xp2),p1(xp1){
  61. double area1=2*p1.getArea();
  62. cout<<"两个球体的表面积是:"<<area1<<endl;
  63. double area2=p2.getArea();
  64. cout<<"长方体的表面积是:"<<area2<<endl;
  65.  
  66. all_area=area1+area2;
  67. cout<<"输出总的表面积:"<<all_area<<endl;
  68. }
  69.  
  70. /*Whole::Whole(Whole &p):p1(p.p1),p2(p.p2){
  71.  
  72. all_area=p.area1+p.area2;
  73. }
  74. /*Whole::Whole(Whole &p4):p(p4.p1),p(p4.p2){
  75. cout<<"输出总的表面积:";
  76. area=p4.area;
  77. }*/
  78. int main(){
  79. double m;
  80. cout<<"请输入m的值:";
  81. cin>>m;
  82. double rr=m/2;
  83. circle xp1(rr);
  84. Rectangle xp2(2*m,m,m);
  85. Whole(xp1,xp2);
  86. return 0;
  87. }

执行结果:

是错误的

C++拷贝函数的小结,关于变量的作用域等---ShinePans的更多相关文章

  1. 『无为则无心』Python函数 — 30、Python变量的作用域

    目录 1.作用于的概念 2.局部变量 3.全局变量 4.变量的查找 5.作用域中可变数据类型变量 6.多函数程序执行流程 1.作用于的概念 变量作用域指的是变量生效的范围,在Python中一共有两种作 ...

  2. Python 学习 第七篇:函数1(定义、调用和变量的作用域)

    函数是把一些语句集合在一起的程序结构,用于把复杂的流程细分成不同的组件,能够减少代码的冗余.代码的复用和修改代码的代价. 函数可以0个.1个或多个参数,向函数传递参数,可以控制函数的流程.函数还可以返 ...

  3. python基础(三元运算+深浅拷贝+函数参数)

    三元运算 三元运算,又称三目运算,主要作用是减少代码量,是对简单的条件语句的缩写. 书写格式: result = 值1 if 条件 else 值2 即如果条件成立,则将值1赋给result变量,如果不 ...

  4. JavaScript闭包理解【关键字:普通函数、变量访问作用域、闭包、解决获取元素标签索引】

        一.闭包(Closure)模糊概述 之前总觉得闭包(Closure)很抽象而且难理解,百度一下"闭包"名词,百度的解释是:“闭包是指可以包含自由(未绑定到特定对象)变量的代 ...

  5. c++ 入门之深入探讨拷贝函数和内存分配

    在c++入门之深入探讨类的一些行为时,说明了拷贝函数即复制构造函数运用于如下场景: 对象作为函数的参数,以值传递的方式传给函数. 对象作为函数的返回值,以值的方式从函数返回 使用一个对象给另一个对象初 ...

  6. c++中内存拷贝函数(C++ memcpy)详解

    原型:void*memcpy(void*dest, const void*src,unsigned int count); 功能:由src所指内存区域复制count个字节到dest所指内存区域. 说明 ...

  7. python基础-3 集合 三元运算 深浅拷贝 函数 Python作用域

    上节课总结 1 运算符 in 字符串 判断  : “hello” in "asdasfhelloasdfsadf" 列表元素判断:"li" in ['li', ...

  8. C++析构、拷贝、赋值、移动拷贝函数的几个知识点(不全)

    怕忘了,写这:析构函数不会释放指针成员指向的对象. 众所周知,C++的类如果没有默认构造函数,会自动生成一个. 同理,如果没有复制构造函数即A::A(const A&){}这个函数 ,则系统也 ...

  9. JavaScript函数定义和调用 变量作用域

     本文是笔者在看廖雪峰老师JavaScript教程时的个人总结   JavaScript中函数定义可以是这样的格式 function 函数名(参数) {     函数体 } 也可以是这样的格式     ...

随机推荐

  1. 记录C#错误日志工具

    在编程过程中,我们经常会用try...catch处理可能出错的代码块.如果程序出现错误,则直接show出错误信息. 当然,大型的系统都有错误日志处理模块,用数据库记录错误日志信息,有相应的写入错误日志 ...

  2. Java基础(三):修饰符、运算符、循环结构和分支结构

    一.Java修饰符: Java语言提供了很多修饰符,主要分为以下两类:访问修饰符和非访问修饰符.修饰符用来定义类.方法或者变量,通常放在语句的最前端. 1.访问控制修饰符: Java中,可以使用访问控 ...

  3. 强连通tarjan模版

    #include<stdio.h> #include<iostream> #include<math.h> #include<queue> #inclu ...

  4. 如何使用FF的Firebug组件中的net工具查看页面元素加载消耗时间

    1.安装FF的Firebug组件:点击FF的Tools的Add-ons菜单,输入Firebug关键字,并选择合适的版本Install. 2.安装完毕后地址栏右边会出现一个小虫图标,右边还有一个下拉箭头 ...

  5. Inception in CNN

    之前也写过GoogLeNet的笔记.但那个时候对Inception有些似懂非懂,这周又一次看了一遍,觉得有了新的体会,特地又一次写一篇博客与它再续前缘. 本文属于论文笔记性质.特此声明. Networ ...

  6. 创建线程安全的单例(ARC或 非ARC)

    一:创建 宏 文件 SynthesizeSingleton.h SynthesizeSingleton.h #if __has_feature(objc_arc) // ARC Version #de ...

  7. Oracle查询备注信息

    查询表的备注信息: SELECT TABLE_NAME, TABLE_TYPE, COMMENTS FROM USER_TAB_COMMENTS WHERE TABLE_NAME = 'MR_DEPT ...

  8. Linux/shell命令的实际应用——查看Port占用 netstat

    启动1024端口一下,是需要root权限的 该Linux/shell命令主要用于解决: 1.查看某端口是否被占用: 2.查看某端口被哪个进程占用: 3.查看某个进程占用了哪些端口: 比如我tomcat ...

  9. exception is the version of xbean.jar correct

      CreateTime--2018年2月5日09:20:00 Author:Marydon 异常: is the version of xbean.jar correct 情景还原: 在使用Java ...

  10. eclipse Failed to load the JNIshared library

      eclipse Failed to load the JNIshared library CreateTime--2018年4月22日22:08:35 Author:Marydon 1.情景再现 ...