رفتن به مطلب
جامعه‌ی برنامه‌نویسان مُدرن ایران

جستجو در تالارهای گفتگو

در حال نمایش نتایج برای برچسب های 'class'.



تنظیمات بیشتر جستجو

  • جستجو بر اساس برچسب

    برچسب ها را با , از یکدیگر جدا نمایید.
  • جستجو بر اساس نویسنده

نوع محتوا


وبلاگ‌ها

چیزی برای نمایش وجود ندارد

چیزی برای نمایش وجود ندارد

تالارهای گفتگو

  • انجمن‌های آی او استریم
    • اخبار و اعلامیه‌های سایت
    • اسناد و قوانین مرجع
    • رویداد‌ها و جلسات
    • معرفی محصولات نوشته شده‌ بومی
    • مرکز نظرسنجی جامعه‌ی برنامه‌نویسان
    • مقالات و اسناد مشاوره‌ای
    • مرکز چالش برانگیز برنامه‌نویسان
    • رمز‌های موفقیت
    • ابزار‌ها و نرم‌افزارهای کاربردی برنامه‌نویسان حرفه‌ای
  • استارتاپی و کسب‌و‌کار
    • استارتاپ‌ها
    • سرمایه گذاری
    • شتاب دهنده‌ها
    • پارک‌های علم و فناوری و مراکز رشد
    • مصاحبه با استارت‌آپ‌ها
    • قوانین حقوقی
    • داستان‌های موفقیت
    • کارآفرینان و متخصصین
    • مشاوره اجرای کسب‌وکار
    • اخبار حوزه‌ی استارتا‌پی
    • آگهی‌های استخدامی
  • زبان‌های برنامه نویسی
    • برنامه نویسی در C و ‏++C
    • برنامه نویسی با Java
    • برنامه نویسی با JavaScript
    • برنامه نویسی با Go
    • برنامه نویسی با Python
    • برنامه نویسی با Delphi
    • برنامه نویسی با Ruby
    • برنامه نویسی با VB6
  • طراحی و توسعه وب
    • برنامه نویسی در PHP
    • برنامه نویسی با Node.JS
  • طراحی و توسعه وب اپلیکیشن‌ها
    • طراحی و توسعه در Angular
    • طراحی و توسعه در React.JS
    • طراحی و توسعه در Vue.JS
  • طراحی و توسعه موبایل و اِمبِد‌ها و تلوزیون‌ها
    • برنامه نویسی تحت محصولات اپل
    • برنامه نویسی تحت محصولات گوگل
    • طراحی و توسعه تحت محصولات دیگر
  • برنامه‌نویسی سطح پایین و سیستم عامل‌ها
    • سیستم عامل‌های آزاد
    • سیستم عامل‌های تجاری
    • مباحث آموزشی مرتبط با سیستم‌عامل
  • شبکه و اینترنت
    • مباحث و منابع آموزشي
    • سوالات و مشکلات
  • بانک‌های اطلاعاتی
    • پایگاه داده MySQL
    • پایگاه داده PostgreSQL
    • پایگاه داده SQLite
    • پایگاه داده MongoDB
    • پایگاه داده SQL Server
    • دیگر پایگاه‌های داده
  • برنامه نویسی تحت محصولات اپل
  • برنامه نویسی تحت محصولات مایکروسافت
  • طراحی و توسعه تجربه کاربری (UX) و رابط کاربری (UI)
  • درخواست انجام پروژه (ویژه)
  • سوالات و مباحث عامیانه
  • سطل آشغال

Product Groups

  • کتاب‌ها و مقالات آموزشی

دسته ها

  • علمی
  • استارتاپی
  • برنامه‌نویسی
    • زبان‌های برنامه نویسی
    • معماری‌ها
  • کامپایلر و مفسر
  • محیط‌های توسعه
  • پلتفرم‌های توسعه
  • مجوز‌های نرم‌افزاری
  • فناوری‌ها
    • پردازش تصویر
    • اینترنت اشیاء
    • پردازش ابری (Cloud Computing)
    • چند سکویی (Cross-Platform)
    • بیگ دیتا (Big Data)
    • هوش مصنوعی (AI)
    • سخت افزار
    • نرم‌افزار و اپلیکیشن
    • اینترنت و شبکه
    • رمزنگاری
    • امبد‌ها (Embedded)
  • طراحی
    • تجربه کاربری
    • رابط کاربری

دسته ها

  • عمومی
  • گرافیکی
  • شبکه و ارتباطات

دسته ها

  • کامپایلر‌ها
  • محیط‌های توسعه
  • کتابخانه‌ها
  • ماژول‌ها و پلاگین‌ها
  • محصولات بومی
  • کتاب‌ها و مقالات
  • زبان‌ها و ابزار‌ها
  • طراحی و گرافیک

جستجو در ...

نمایش نتایجی که شامل ...


تاریخ ایجاد

  • شروع

    پایان


آخرین بروزرسانی

  • شروع

    پایان


فیلتر بر اساس تعداد ...

تاریخ عضویت

  • شروع

    پایان


گروه


درباره من


شماره تلفن همراه


شناسه گیت‌هاب


شناسه لینکدین


شناسه پیام رسان


شهر


آدرس پستی

3 نتیجه پیدا شد

  1. فرهاد شیری

    در خیلی از پروژه هایی تجاری که برای سخت افزارهای مشخصی نرم افزار ویا Frame Ware تولید میکنید.(مثال درایور نویسی ویا ماژولهای کنترلی سخت افزار و... ) اغلب اوقات به دستوراتی ازقبیل memcpy , memset ,std::copy ,... جهت جایگذاری بیت ها وبایت های لازم به طور قطع به یقین از دستورات فوق استفاده میکنیم، لذا کلاس فوق اغلب این توابع را در اختیارتان قرار میدهد که برای برنامه نویسی شی گرا بهینه شده است. در صورتی که پیشنهادی جهت بهبود این کلاس داشتید لطفا دریغ نفرمایید. #ifndef BYTEHELPER_H_ #define BYTEHELPER_H_ /*#define WRITE_BYTE(type,arg1,arg2) \ ByteHelper::getInstance()->write_Byte<type>(arg1,arg2) #define WRITE_BYTES(arg1,arg2) \ ByteHelper::getInstance()->write_Bytes(arg1,arg2) #define WRITE_BYTES2(arg1,arg2,arg3) \ ByteHelper::getInstance()->write_Bytes(arg1,arg2,arg3) #define WRITE_BYTES_COPY(type,arg1,arg2,arg3,arg4) \ ByteHelper::getInstance()->write_Bytes_Copy<type>(arg1,arg2,arg3,arg4) #define WRITE_BYTES_COPY2(type,arg1,arg2) \ ByteHelper::getInstance()->write_Bytes_Copy<type>(arg1,arg2) #define CLEAR_BYTES(arg1) \ ByteHelper::getInstance()->clear_Bytes(arg1)*/ #include "MyException.h" #include "unique_ptr.h" #include <string.h> #include <iterator> #include <algorithm> #include <sstream> #include "test_template.h" #include "const.h" class ByteHelper { private: //defined private ctor! because can not create object. //must be create object calling static factory method getInstance(); ByteHelper(ByteHelper&);//Copy ctor ByteHelper& operator=(ByteHelper&);//Copy Assignment operator static void deletePointer(ByteHelper* tp) { if (tp != NULL) { delete tp; tp = NULL; } } public: ByteHelper() : pBinaryHelper(new binaryFormatHelper) { } //Default ctor ~ByteHelper() { } //static ctor inline static const uniqueptr<ByteHelper>& getInstance() { static const uniqueptr<ByteHelper> pByteHelper(new ByteHelper, &deletePointer); return pByteHelper; } template<typename _R, size_t N> inline void* clear_Bytes(_R(&sourceData)[N]) { return memset(sourceData,0,N); } /* * clear_bytes because overloaded if sourcedata * is C style Array sending into class must be sending array size into function * and if sourcedata is pointer to array no needed array size.! */ template<typename _R> inline void* clear_Bytes(_R* sourceData, size_t size) { return memset(sourceData, 0, size > 0 ? size : sizeof(sourceData)); } template<typename _CAST_TYPE, typename _R, typename _T> inline bool write_Byte(_R* restrict_to, const _T& restrict_from) { try { *((_CAST_TYPE) restrict_to) = restrict_from; } catch (MyException& E) { return false; } return true; } template<typename _R, typename _T> inline bool convert_Byte(_R* restrict_to, _T* restrict_from) { try { restrict_to = *(reinterpret_cast<_R> (restrict_from[0])); } catch (MyException& E) { return false; } return true; } template<typename _R, typename _T> inline _R* write_Bytes(_R* restrict_to, const _T* restrict_from, size_t size = 0) { try { memcpy(restrict_to, restrict_from, size > 0 ? size : sizeof(restrict_from)); } catch (MyException& E) { return 0; } return restrict_to; } template<typename _R, typename _T> inline _R* copy_Bytes(_R* restrict_to, const _T* restrict_from, int beginOffset = 0, int writeSizeToDest = 0) { try { int tmp_size = writeSizeToDest > 0 ? writeSizeToDest : sizeof(restrict_to); std::copy(restrict_from + beginOffset, restrict_from + tmp_size,reinterpret_cast<_R*>(restrict_to)); } catch (MyException& E) { return 0; } return restrict_to; } template<typename _R, typename _T> _R* xChangeBuffer(_R* const restrict_to , const _T* const restrict_from) const { if (restrict_from != NULL) { getInstance()->clear_Bytes(restrict_to, sizeof(restrict_to)); getInstance()->write_Bytes(restrict_to, restrict_from, sizeof(restrict_from)); } return restrict_to; } template<typename _R, typename _T> _R* xChangeBuffer(_R* const restrict_to , const _T* const restrict_from) { if (restrict_from != NULL) { clear_Bytes(restrict_to, sizeof(restrict_to)); write_Bytes(restrict_to, restrict_from, sizeof(restrict_from)); } return restrict_to; } template<class Tp> class OutputStream: std::ostream_iterator<Tp> { public: ~OutputStream() { } typedef std::ostream_iterator<Tp> ostream_ptr; OutputStream(const byte* format, std::ostream& os_type) : std::ostream_iterator<Tp>(os_type, format) { } template<typename T> void operator()(T container) { std::copy(container.begin(), container.end(), *this->get()); } private: const ostream_ptr* get() const { return static_cast<const ostream_ptr*> (this); } }; template<class T> inline static const ByteHelper::OutputStream<T>& getOutPutStreamInstance( const byte* format) { static ByteHelper::OutputStream<T> m_outPutStream(format, std::cout); return m_outPutStream; } class binaryFormatHelper { private: /* Consent */ static const udword INT_SIZE = sizeof(dword) * BYTE_BIT_SIZE; //32 static const word CHAR_SIZE = sizeof(byte) * BYTE_BIT_SIZE; // 8 public: const byte* bytesToHex(const PBYTE const source_hex, word qtyByte) { Ostream ss; for (word i = qtyByte ; i >= 0; i--) { if (source_hex + i) ss << std::hex << (dword) *(source_hex + i ); } if (ss.str().c_str()) { return ss.str().c_str(); } else { static const byte emptyStream[]={'-' , '\0'}; return emptyStream; } } udword evaluateNumFromString(const PBYTE const str, const dword len) { udword number = 0; word bitShift = INT_SIZE; if (len > 1) { for (dword i = 0; i < len; i++) { bitShift -= CHAR_SIZE; number += (BYTE) *(str + i) << bitShift; } } else if (len == 1) { number = (BYTE) *(str + 0); } return number; } void printBinary32(udword srcNum, byte* const destBuffer) { register udword bit; udword cnt = 0; dword index = 0; size_t sz = sizeof(dword) * 8; for (bit = 1 << (sz - 1); bit > 0; bit >>= 1 /*i/=2*/) { if (++cnt == 5) { *(destBuffer + index++) = '-'; cnt = 1; } *(destBuffer + index++) = (srcNum & bit) ? '1' : '0'; } } template<class T, size_t N> void writeBinary(const PBYTE const src_data, T(&dest_data)[N], dword src_index, dword beginOffset, dword endOffset) { //1- evaluation of the numerical value of a byte array. udword eval_num = evaluateNumFromString(reinterpret_cast<const PBYTE> (&src_data[src_index]) , 1); //2- write the binary values into temporary byte array. byte tmpBuf[BINARY_PATTERN_SIZE]; getInstance()->clear_Bytes(tmpBuf); printBinary32(eval_num, tmpBuf); //3- copy needed byte from temporary byte array into destination byte array. getInstance()->clear_Bytes(dest_data); getInstance()->copy_Bytes(dest_data, tmpBuf, beginOffset,endOffset); } }; const uniqueptr<binaryFormatHelper> pBinaryHelper; }; #endif /* BYTEHELPER_H_ */ class MyException: public std::exception { public: MyException(std::string errMsg) { printStackTrace(errMsg.c_str()); } MyException(const MyException &); static void destory(MyException *my) { delete my; } const char* what() { return std::exception::what(); } void printStackTrace(const char* cError) const { std::cout <<"Error ->" << cError; } private: CoutPrinter printer; }; فقط بجای کلاس unique_ptr از کلاسهای std::unique_ptr در memory.h استفاده نمایید. تابع ()getInstance : جهت استفاده از توابع کلاس فوق نیازی به ایجاد یک شی جدید از کلاس فوق ندارید با استفاده از متد فوق می توانید یک سازنده استاتیک داشته باشید. در صورتی که مفید بود! بفرمایید متدهای الباقی راهم توضیح بدم.
  2. با سلام. بنده خروجی کد اسمبلی تولید شده Struct و Class را بررسی کردم ظاهرا که خروجی یکسانی دارند ! آیا واقعا دیگر تفاوتی بین کلمه‌کلیدی struct و class در سی‌پلاس‌پلاس نیست ؟ struct.cpp struct AnotherType{ public : int StructType; }; int main(){ AnotherType Object; return 0; } class.cpp class AnotherType{ public : int ClassType; }; int main(){ AnotherType Object; return 0; } و خروجی های اسمبلی تولید شده : struct.cpp [ghasem@clibcore test]$ g++ -S struct.cpp -o Struct && cat Struct .file "struct.cpp" .text .globl main .type main, @function main: .LFB0: .cfi_startproc pushq %rbp .cfi_def_cfa_offset 16 .cfi_offset 6, -16 movq %rsp, %rbp .cfi_def_cfa_register 6 movl $0, %eax popq %rbp .cfi_def_cfa 7, 8 ret .cfi_endproc .LFE0: .size main, .-main .ident "GCC: (GNU) 8.2.1 20181105 (Red Hat 8.2.1-5)" .section .note.GNU-stack,"",@progbits class.cpp [ghasem@clibcore test]$ g++ -S class.cpp -o Class && cat Class .file "class.cpp" .text .globl main .type main, @function main: .LFB0: .cfi_startproc pushq %rbp .cfi_def_cfa_offset 16 .cfi_offset 6, -16 movq %rsp, %rbp .cfi_def_cfa_register 6 movl $0, %eax popq %rbp .cfi_def_cfa 7, 8 ret .cfi_endproc .LFE0: .size main, .-main .ident "GCC: (GNU) 8.2.1 20181105 (Red Hat 8.2.1-5)" .section .note.GNU-stack,"",@progbits و برای اطمینان خروجی حاصل از دستور diff Struct Class : [ghasem@clibcore test]$ diff Struct Class 1c1 < .file "struct.cpp" --- > .file "class.cpp"
  3. سلام در صورتی که تعاریف توابع عضو کلاس (class function member definition) را در همان فایل anothertest.h قرار دهیم برنامه بدون مشکلی اجرا میشود. اما در صورتی که تعاریف توابع را به داخل فایل anothertest.cpp انتقال دهیم ، برنامه کامپایل ولی با خطای لینکر مواجه میشود. دلیل این اتفاق چیست ؟ --ویرایش : پس از جستجویی که انجام دادم متوجه شدم که به دلیل اینکه کامپایلر برای هر نمونه از template هایی که ما نیاز داریم یک نسخه جداگانه درست میکند. مثلا در کد زیر. کد باید به این صورت تغییر کند : class TemplateTest{ private : int ClassVariable; public : TemplateTest(const int& input); int ReturnClassVariable(void); }; Git Diff #ifndef ANOTHERTEST_H #define ANOTHERTEST_H -template <class AnotherType> class TemplateTest{ private : - AnotherType ClassVariable; + int ClassVariable; public : - TemplateTest(const AnotherType& input); - AnotherType ReturnClassVariable(void); + TemplateTest(const int& input); + int ReturnClassVariable(void); }; #endif // ANOTHERTEST_H و از آنجایی که تعاریف کلاس ها در فایل دیگری قرار دارد. کامپایلر فراموش به نمونه سازی از آنها میکند. و به این دلیل است که با خطای لینکر مواجه میشویم. و برای رفع این مشکل باید تعاریف توابع را نیز در فایل anothertest.h قرار بدهیم. با این اوصاف آیا روش دیگه ای هست که از template ها در فایل های جداگانه استفاده کنیم ؟ anothertest.h #ifndef ANOTHERTEST_H #define ANOTHERTEST_H template <class AnotherType> class TemplateTest{ private : AnotherType ClassVariable; public : TemplateTest(const AnotherType& input); AnotherType ReturnClassVariable(void); }; #endif // ANOTHERTEST_H anothertest.cpp #include "anothertest.h" template<class AnotherType> TemplateTest<AnotherType>::TemplateTest(const AnotherType &input) : ClassVariable(input){ } template<class AnotherType> AnotherType TemplateTest<AnotherType>::ReturnClassVariable(){ return this->ClassVariable; } main.cpp #include <iostream> #include "anothertest.h" int main(){ TemplateTest<int> AnotherTemplate(100); std::cout << AnotherTemplate.ReturnClassVariable () << std::endl; return 0x0000; }
×
×
  • جدید...