الفريق العربي للبرمجةأرشيف المنتديات · 2000 – 2023
نسخة أرشيفية للقراءة فقط — التسجيل والمشاركة مغلقان، والمحتوى محفوظ كما كان.

كيف استخدم Memcpy مع كلاس مثل Char

بدأه Abdullah.Alshammeri في 27 يونيو 2008 · 3 رد · 762 مشاهدة · في لغة C و ++C
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

السلام عليكم ..

بنيت كلاس على طريقة الجافا اسمه Char لحاجتي اليه .. واريد أن تصبح جميع العمليات التي تجري على النوع العادي char تجري على الكلاس Char .. وقمت باعادة تعريف عدد كبير من operator مثل * - + ++ -- الخ ..

والان اريد نقل بيانات من الكلاس Char الى الكلاس Char باستخدام memcpy ..

واريد نقل البيانات من مصفوفة char عادية الى مصفوفة Char (كلاس) ..

مثال :

  char source[]={"ahmad"};// متغير عادي
  Char *ch = new Char[5]; // كلاس

memcpy(ch,source,4);

for (int i = 0 i<4;i++)
cou<<ch.getData();

لكن لايتم نسخ جميع الحروف .. انما اخر حرف فقط ..

السؤال هو كيفية استخدام memcpy مع كلاس بدلا من char ...

اعذروني لجهلي بدوال ال memory عموما ..

تم تعديل هذه المشاركة بواسطة الشمري في 27 يونيو 2008 في 17:49

logo1.png تطبيق طمأنينة ، نسخة بيتا على أندرويد

عبدالله الشمّري - Al-Shammari

CodingAlone.com

twitter @abshammeri

abshammeri AT gmail.com

github : abshammeri

#2

السلام عليكم :

هل هذا ما تريد

[background=#0ff]
#include<iostream>
#include<string.h>
using namespace std;
class Char
{
private:
    char m_str;
public:
    Char(){}
    Char(char str){m_str=str;}
    char getData(){return m_str;}
};
int main()
{


  char source[]="ahmad";
  Char *ch = new Char[5];

memcpy(ch,source,strlen(source));

for (int i = 0; i<strlen(source);i++)
{

cout<<ch->getData();
ch++;
}
return 0;
}
[/background]
tvquran_6.gif

#3

بارك الله فيك أخوي فهد ..

بعد مقارنةة برنامجك .. ببرنامجي .. هذا هو الفرق :

#include<iostream>
#include<string.h>
using namespace std;


template<class T>
class Char
{
	private:
	T m_str;
	public:
	Char()
	{


	}
	virtual ~Char() // هنا المشكلة 
	{

	}
	T getData(){return m_str;}

};




int main()
{


	char source[]="ahmad";
	Char<char> *ch = new Char<char>[5];

	cout<<strlen(source)<<endl;
	memcpy(ch,source,strlen(source));

	for (int i = 0; i<strlen(source);i++)
	{

		cout<<ch->getData();
			ch++;
	}
	cout<<endl;
		return 0;
}

جعلت الهادم destructor ...

virtual

وكانت تظهر لي نتيجة خاطئة ...

لما أزلت virtual .. كما هو في كود فهد .. تظهر لي النتيجة صحيحة ..

السؤال الان .. ماهو السبب ؟!

logo1.png تطبيق طمأنينة ، نسخة بيتا على أندرويد

عبدالله الشمّري - Al-Shammari

CodingAlone.com

twitter @abshammeri

abshammeri AT gmail.com

github : abshammeri

#4

اظن ان السبب واضح.

عندما تستخدم الكلمة virtual مع المهدم انت تعطى الطائن صفة جديدة مخفية

فى العادة يقوم الكومبايلر بتخزين خاصية لكل كائن من الكلاس تسمى ال vector table

الكثير يعرفون ال vtable اكثر من vector table

vector table is used to point to the locations in the memory of the functions

that may be overriden by means of inheretance or such mechanism, the behavior of your

program is totally expectable

مواضيع مشابهة