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

#include <iostream>
using namespace std;
class circle
{
private:
	double r0;
public:
	circle(double r)
	{
		r0 = r;
		cout << r << "调用了球体的初始化的函数\n";
	}
	circle(const circle &t){
		r0 = t.r0;
		cout << "r=" << r0 << "调用了球体的复制的函数\n";
	}
	//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 << ",调用了长方体的初始化的函数\n";
	}

	Rectangle(Rectangle &n){
		length = n.length;
		width = n.width;
		height = n.height;
		cout << height << "调用了长方体的复制函数\n";
	}
	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;
}

对用拷贝函数,有一个很重要的容易错误的地方:

在类中定义 一个变量时:

如我在 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<<"调用了球体的初始化的函数\n";
		}
		circle(circle & t){
	     r=t.r;
	    cout<<"r="<<r<<"调用了球体的复制的函数\n";
}
		//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<<",调用了长方体的初始化的函数\n";
		}

		Rectangle(Rectangle &n){
	    length=n.length;
		width=n.width;
		height=n.height;
		cout<<height<<"调用了长方体的复制函数\n";
}
		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;
}

运行结果:

是错误的

时间: 2024-12-21 04:00:02

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

【解迷糊】关于PHP的extract()函数提取出的变量的作用域问题

真理:该函数提取出的变量遵循 变量作用域 的原则,见下图: 四种情况: class Test { public function dosome() { $arr = ['x' => 'xing', 'y' => 'ya']; extract($arr); } public function get() { return $x; } } $test = new Test(); $test->dosome(); $a = $test->get(); echo $a; //无法打印 $a

bash特性小结&bash变量

时间就是金钱 效率就是生命 一.bash编程 |---------------| |应用           | |-----------|   | |壳|库函数 |    | //可以直接针对系统调用编程 |---------------| |系统调用       | |---------------| |内核           | |---------------| |硬件           | |---------------|     现在程序开发更重视程序开发的速度-因此Pytho

SQL中convert()函数使用小结

CONVERT(data_type,expression[,style]) convert(varchar(10),字段名,转换格式) 说明:此样式一般在时间类型(datetime,smalldatetime)与字符串类型(nchar,nvarchar,char,varchar)相互转换的时候才用到. 语句 结果SELECT CONVERT(varchar(100), GETDATE(), 0) 07 15 2009 4:06PMSELECT CONVERT(varchar(100), GETD

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

原型:void*memcpy(void*dest, const void*src,unsigned int count); 功能:由src所指内存区域复制count个字节到dest所指内存区域. 说明:src和dest所指内存区域不能重叠,函数返回指向dest的指针. 举例: // memcpy.c #include <stdlib.h> #include <string.h> main() { char *s= "Golden Global View "; c

函数基础小结

函数基础小结 一.定义函数 只检测语法,不执行代码 二.函数定义的三种方式 有参函数 无参函数 空函数 三.调用函数 def f1(): return 123 f = f1() f1()*2 lis = [f1(),2] 四.函数的返回值 return返回返回值,函数遇到return会终止,return可以返回任意数据类型的值,同时也可以返回多个值 函数只有在调用阶段才会接收返回值,默认返回None 五.函数的参数 5.1 形参 接收实参,具有描述意义,没有具体值 5.2 实参 具有具体的值,传

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

众所周知,C++的类如果没有默认构造函数,会自动生成一个. 同理,如果没有复制构造函数即A::A(const A&){}这个函数 ,则系统也会自动生成一个,但这个自动生成的复制构造函数不一定满足我们的要求.析构函数也会自动生成(如果没定义的话). 比如下面的例子: 1 class A{ 2 public: 3 int* a; 4 int b; 5 A()=default; 6 A(int x):a(new int(10)){b=x;} 7 ~A(){delete a;cout<<&qu

编写实现字符串拷贝函数strcpy()完整版

有个题目编程实现字符串拷贝函数strcpy(),很多人往往很快就写出下面这个代码. void strcpy( char *strDest,char *strSrc ) { while(( *strDest++ = * strSrc++) != '\0' );//逐个赋值字符串数组中的数据,知道字符串结束 } 其实仔细看看这个实现过程并不完美,严格来说非常不严谨,我们可以完善一下. char * strcpy( char *strDest, const char *strSrc )//将源字符串加

PHP引用操作以及外部操作函数的局部静态变量的方法

通过引用方式在外部操作函数或成员方法内部的静态变量 下面举个简单的例子,说明三个关于引用方面的问题: 1. 参数引用后函数内进行类型转换同样是地址操作 2. 参数引用后再传递给其他函数时需要再次添加引用符才能保持地址操作 3. 函数返回值引用必须在函数申明时以及调用时都添加引用操作符 该例子使用的是对象方法的操作,同样适用于函数 <?php class A { public function & test1(& $a) { static $i = 0; var_dump($i); $

javaScript定义函数的三种方式&amp;amp;变量的作用域

一.函数定义 方式1.普通方式定义函数 function 函数名(參数n){ 函数体 } function add(a,b){ return a+b; } 方式2.直接量定义函数 var 函数名=function(參数n){ 函数体 } var add=function(a,b){ return a+b; } 方式三.构造方式定义函数 var 函数名=new Function(參数n,函数体); var add = new Function('a,b','return a+b;'); 二.变量的