zoukankan      html  css  js  c++  java
  • C++拷贝函数的小结,关于变量的作用域等---ShinePans

    #include <iostream>
    using namespace std;
    class circle
    {
    private:
    	double r0;
    public:
    	circle(double r)
    	{
    		r0 = r;
    		cout << r << "调用了球体的初始化的函数
    ";
    	}
    	circle(const circle &t){
    		r0 = t.r0;
    		cout << "r=" << r0 << "调用了球体的复制的函数
    ";
    	}
    	//double get_rr(){return r;}
    	double getArea(){
    		cout << "球体的表面积:" << 4 * 3.14*r0*r0;
    		return 4 * 3.14*r0*r0;
    	}
    };
    
    class Rectangle
    {
    private:
    	double length;
    	double width;
    	double height;
    public:
    	Rectangle(double a, double b, double c){
    		length = a;
    		width = b;
    		height = c;
    		cout << length << "," << width << "," << height << ",调用了长方体的初始化的函数
    ";
    	}
    
    	Rectangle(Rectangle &n){
    		length = n.length;
    		width = n.width;
    		height = n.height;
    		cout << height << "调用了长方体的复制函数
    ";
    	}
    	double getArea(){
    		return (2 * length*width + 2 * length*height + 2 * width*height);
    	}
    };
    
    class Whole
    {
    private:
    	circle p1;
    	Rectangle p2;
    
    	double all_area;
    public:
    	Whole(circle xp1, Rectangle xp2);
    
    };
    Whole::Whole(circle xp1, Rectangle xp2) :p2(xp2), p1(xp1){
    	double area1 = 2 * p1.getArea();
    	cout << "两个球体的表面积是:" << area1 << endl;
    	double area2 = p2.getArea();
    	cout << "长方体的表面积是:" << area2 << endl;
    
    	all_area = area1 + area2;
    	cout << "输出总的表面积:" << all_area << endl;
    }
    
    /*Whole::Whole(Whole &p):p1(p.p1),p2(p.p2){
    
    all_area=p.area1+p.area2;
    }
    /*Whole::Whole(Whole &p4):p(p4.p1),p(p4.p2){
    cout<<"输出总的表面积:";
    area=p4.area;
    }*/
    int main(){
    	double m;
    	cout << "请输入m的值:";
    	cin >> m;
    	double rr = m / 2;
    	circle xp1(rr);
    	Rectangle xp2(2 * m, m, m);
    	Whole(xp1, xp2);
    	system("pause");
    	return 0;
    }
    
    
    





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

    在类中定义 一个变量时:

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

    以下是使用r的代码:

    #include <iostream>
    using namespace std;
    class circle
    {
    	private:
    		double r;
    	public:
    		circle(double r)
    		{
    			r=r;
    			cout<<r<<"调用了球体的初始化的函数
    ";
    		}
    		circle(circle & t){
    	     r=t.r;
    	    cout<<"r="<<r<<"调用了球体的复制的函数
    ";
    }
    		//double get_rr(){return r;}
    		double getArea(){
    			cout<<"球体的表面积:"<<4*3.14*r*r;
    			return 4*3.14*r*r; 
    		}
    };
    
    class Rectangle
    {
    	private:
    		double length;
    		double width;
    		double height;
    	public:
    		Rectangle(double a,double b,double c){
    		length=a;
    		width=b;
    		height=c;
    		cout<<length<<","<<width<<","<<height<<",调用了长方体的初始化的函数
    ";
    		}
    		
    		Rectangle(Rectangle &n){
    	    length=n.length;
    		width=n.width;
    		height=n.height;
    		cout<<height<<"调用了长方体的复制函数
    ";
    }
    		double getArea(){
    			return (2*length*width+2*length*height+2*width*height);
    		}
    }; 
    
    class Whole
    {
    	private:
    			circle p1;
    			Rectangle p2;
    	
    		double all_area;
    	public:
    		Whole(circle xp1,Rectangle xp2);
    	  
    };
    Whole::Whole(circle xp1,Rectangle xp2):p2(xp2),p1(xp1){
    	double area1=2*p1.getArea();
    	cout<<"两个球体的表面积是:"<<area1<<endl;
    	double area2=p2.getArea();
        cout<<"长方体的表面积是:"<<area2<<endl;	
    	
    	all_area=area1+area2;
    	cout<<"输出总的表面积:"<<all_area<<endl;
    }
    
    /*Whole::Whole(Whole &p):p1(p.p1),p2(p.p2){
    
    	all_area=p.area1+p.area2;
    }
    /*Whole::Whole(Whole &p4):p(p4.p1),p(p4.p2){
    	cout<<"输出总的表面积:";
    	area=p4.area;
    }*/
    int main(){
    	double m; 
    	cout<<"请输入m的值:";
    	cin>>m;
    	double rr=m/2; 
    	circle xp1(rr);
        Rectangle xp2(2*m,m,m);
    	Whole(xp1,xp2);
    	return 0;
    }
    
    
    


    执行结果:



    是错误的



  • 相关阅读:
    Odoo开发教程15-管理 Odoo 数据库
    星辉信息科技Odoo开发教程14-源码安装 Odoo第三讲
    星辉信息科技Odoo开发教程13-源码安装 Odoo第二讲
    Odoo开发教程12-源码安装 Odoo
    星辉信息科技Odoo开发教程11-使用 Windows 子系统安装 Linux
    Metasploit 进阶
    Metasploit 一些重要模块使用介绍
    Metasploit 使用基础
    【译】Attacking XML with XML External Entity Injection (XXE)
    CentOS6 安装Sendmail + Dovecot + Roundcubemail
  • 原文地址:https://www.cnblogs.com/lytwajue/p/6737220.html
Copyright © 2011-2022 走看看