深拷贝与浅拷贝和字符串连接的一些知识

深拷贝与浅拷贝
浅拷贝:
实现对象间数据元素一一对应复制;
深拷贝:
当复制的对象是指针类型时,不复制该指针成员本身,而是复制指针所指的对象;
举例:
对象的浅拷贝:
#include<iostream>
using namespace std;
class IntArry
{
	public:
		IntArry(int n)//构造函数 
		{
			data = new int [size];
			size=n;
		}
		
		~IntArry()//析构函数 
		{
		delete[]data; 
		} 
		int &Element(int n)
		{
			return data[n];
		}
		private:
			int *data;
			int size;
 } ;
 
 
		int main()
	{
		int n=2;	
		IntArry a(n);
 		a.Element(0)=5;//赋值
	a.Element(1)=15;//赋值
	IntArry b(a);//拷贝构造,浅拷贝
	cout<<b.Element(0)<<endl<<b.Element(1)<<endl; 
		return 0;
 	}		 

输出:5 15

对象的深拷贝:
存疑。代码写到了在学;


对象数组:
声明:
类名 数组名【元素个数】;
访问方法:
通过下标访问
		数组名【下标】.成员名;
		Point A[2];
		A[0].GetX();

对象数组的初始化:
1.被创建时,系统会调用类的构造函数初始化该对象;
2.通过初始化列表赋值:Point A[2]={Point (1,2),Point(3,4)};
数组元素所属类的构造函数:
不声明构造函数,就调用默认构造函数;
各元素对象的初值要求为相同的值时,可以声明具有默认形参值的构造函数。
各元素对象的初值要求为不同的值时,需要声明带形参的构造函数。
当数组每一个对象被删除时,调用一次析构函数;


对象指针:
声明方式:
类名 *对象指针名;
例子:
Point A(5,10);
Point *ptr;
ptr = &A;
通过指针访问对象成员:
对象指针名->成员名;
ptr->getx()相当于(*ptr).getx();

对象指针举例:
#include<iostream>
using namespace std;
class IntArry
{
	public:
		IntArry(int n)//构造函数 
		{
			data = new int [size];
			size=n;
		}
		
		~IntArry()//析构函数 
		{
		delete[]data; 
		} 
	void print()
	{
		cout<<"指针引用成功"; 
	}
		private:
			int *data;
			int size;
 } ;
 
 
		int main()
	{
	IntArry a(5);
	IntArry *ptr;//建立指针
	ptr = &a;//指针赋值
	ptr->print(); //指针引用
		return 0;
 	}		 
输出:指针引用成功;


this 指针;
隐含于每一个类中成员函数中的特殊指针;
当通过一个对象调用成员函数式,系统间对象的地址赋给this指针,成员函数对对象进行操作时,隐含使用了this指针;
例如:
Point 类中的Set 函数中的语句:
X=xx;
Y=yy;
相当于:
this->X=xx;
this->Y=yy;

动态创建对象:Point *Ptr1 = new Point;
delete Ptr1;
Ptr1 = new Point(1.,2);
delete Ptr1;
动态创建数组:
Point *Ptr = new Point[2];
Ptr[0].move(5,10);
delete []Ptr;

动态数组类:有空再看,再补;
class Point
{   //类的声明同例6-16 …  };

class ArrayOfPoints
{   public:
     ArrayOfPoints(int n)
     {   numberOfPoints=n;  points=new Point[n];  }
     ~ArrayOfPoints()
     {   cout<<"Deleting..."<<endl;
         numberOfPoints=0;  delete [ ] points;     
      }
     Point& Element(int n)
     {  return points[n];  }
   private:
     Point *points;
     int numberOfPoints;
};
void main()
{
	int number;
	cout<<"Please enter the number of points:";
	cin>>number;
    //创建对象数组
    ArrayOfPoints points(number);    
    //通过引用访问数组元素的成员:可以修改对象内部的数据成员;链式表达更简洁
    points.Element(0).Set(5,10); points.Element(1).Set(15,20);   
}

整行输入字符串:
cin.getline(字符数组St,字符个数N,结束符);
功能:一次连续读入多个字符(可以包含空格),知道读慢N个,或者遇到指定的结束符(默认‘\n’)。
读入的字符串存放于St中。读取但不存取结束符;
cin.get(字符数组名St,字符个数N,结束符);
功能:一次连续读入多个字符(可以包含空格),知道读慢N个,或者遇到指定的结束符(默认‘\n)
既不读取也不存储结束符;
举例:
{	char city[80];
	char state[80];
	int  i;
	for (i = 0; i < 2; i++)
	{ cin.getline(city,80,',');
	  cin.getline(state,80,'\n');
}
 
字符串处理函数:
strcat(连接),strcpy(复制),strcmp(比较),strlen(求长度),
strlwr(转换为小写),strupr(转换为大写);
头文件:<cstring>;6.21 string类应用举例
#include <string>
#include <iostream>
using namespace std ;
void trueFalse(int x)
{
  cout << (x? "True": "False") << endl;
}
void main()
{   string S1="DEF",  S2="123";
   char CP1[ ]="ABC"; 
   char CP2[ ]="DEF";
   cout << "S1 is " << S1 << endl;
   cout << "S2 is " << S2 << endl;
   cout<<"length of S2:"<<S2.length()<<endl;
   cout << "CP1 is " << CP1 << endl;
   cout << "CP2 is " << CP2 << endl;
   cout << "S1<=CP1 returned ";
   trueFalse(S1<=CP1); 
   cout << "CP2<=S1 returned ";
   trueFalse(CP2<=S1); 
   S2+=S1;
   cout<<"S2=S2+S1:"<<S2<<endl;
   cout<<"length of S2:"<<S2.length()<<endl;
}

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值