类的学习。
#include<iostream>
using namespace std;class Circle
{
private:float radius;int *p_index;
public:Circle(float r=1.0,int index=100);//構造函數的聲明~Circle(); //析構函數Circle(Circle &c); //拷貝構造函數float area();
};Circle::Circle(float r,int index)//構造函數的定義
{radius=r;cout<<"構造函數被調用"<<endl;p_index=new int(index);//堆區開空間
}float Circle::area()
{return radius*radius*3.14;
}Circle::~Circle()//析構函數:一般就是用于釋放空間
{delete p_index;//釋放空間
}Circle::Circle(Circle &c)//拷貝構造函數
{radius=c.radius;p_index=new int(*c.p_index);//深拷貝:創建一個新的對象和數組,將原對象的各項屬性的“值”(數組的所有元素)拷貝過來,是“值”而不是“引用”,新對象跟原對象不共享內存,修改新對象不會改到原對象cout<<"拷貝構造函數被調用"<<endl;
}
//使用拷貝構造函數的時機
//1.原賦值新
//2.函數調用:實參拷貝形參
//3.函數返回:返回時對象拷貝臨時對象//Circle c1(10.0);
//Circle c2=c1; 調用了一次拷貝構造函數//Circle c1(10.0);
///Circle c2;
//c2=c1; 賦值,沒有使用拷貝構造函數int main()
{Circle c1(10.0,3);//使用構造函數之后,可以直接在定義的變量名后面加括號賦上初始值;Circle c2(c1);cout<<c1.area()<<endl;cout<<c2.area()<<endl;return 0;
}
總結
- 上一篇: CSS3实现太极图教程
- 下一篇: 烦躁的一周