سؤال

بعض الفئة C:

C* a = new C();

C* b(a);  //what does it do?

C* b = a;  //is there a difference?
هل كانت مفيدة؟

المحلول

وC * ب (أ) و C * ب = وتعادل. كما هو الحال مع العديد من اللغات، وهناك أكثر من طريقة للقيام بذلك ...

نصائح أخرى

لاحظ أنه في

C* a = new C();
C* b(a);  

وب مؤشر إلى كائن C تعيين نفس قيمة أ. ومع ذلك،

#include "somefile.h"
C* b(a);  

ونحن يمكن بسهولة مثلما يتم تعريف ب بوصفها وظيفة التي تأخذ كائن من نوع لذلك، وإرجاع مؤشر إلى C.

والمعيار يصف أنواع مختلفة من التهيئة 8.5، وهذين تحديدا تحت 8.5 / 12.

C* b(a);  //what does it do?

وهذا ما يسمى <م> التهيئة مباشرة . إذا كان "ب" نوع فئة، ثم مترجم من شأنها أن تؤدي قرار الزائد على منشئات في C باستخدام 'ا' كحجة. لنوع المؤشر، فإنه ببساطة تهيئة "ب" مع "أ".

C* b = a;  //is there a difference?

والمعيار يأخذ في الاعتبار هذه أن تكون مختلفة في بعض الحالات، ويسمى بناء الجملة أعلاه <م> نسخة التهيئة . أما بالنسبة التهيئة مباشرة باسم 'ب' ليس نوع فئة، ثم يتم تهيئة مع قيمة "أ". إذا "أ" و "ب" هي نفس نوع فئة، ثم <م> التهيئة مباشرة يستخدم.

وأين ب 'هو نوع فئة و"أ" لديه نوع مختلف (فئة أو لا) ثم فإن قواعد تختلف قليلا (8.5 / 14 b1.b3). لذلك لالبرمجية التالية:

C b = a;

أولا، يتم إجراء محاولة لتحويل "أ" لكتابة "C" ثم يستخدم هذا الكائن مؤقت لتهيئة "ب". وهذا أمر مهم كما يمكن أن يكون وضعا حيث <م> التهيئة مباشرة ينجح ولكن نسخة التهيئة فشل:

class A {
public:
  operator int ();
};

class B {
public:
  B (int);
};

void foo ()
{
  A a;
  B b1 (a);  // Succeeds
  B b2 = a;  // Fails
}
  1. C* a = C();الآن هو خلق مؤشر من نوع C ، والتي أيضا تخصيص الجديد الذاكرة باستخدام كلمات رئيسية جديدة....
  2. العبارة التالية تعتمد على الخاص بك منشئ المنطق.ج* ب(أ) ؛ //ماذا يفعل ؟
  3. الأولى والثالثة البيان ما يعادلها.C* b = a ؛ //هل هناك الفرق ؟

وأول واحد يخلق مثيل جديد من C ويضع عنوانه في.

والثاني هو إعلان مؤشر إلى وظيفة. هذا المؤشر يمكن أن نشير إلى أي وظيفة أخذ حجة من نوع لوإرجاع مؤشر إلى كائن من نوع C.

ووالثالث يعلن ب، مؤشر إلى كائن من نوع C وتهيئة مع أ.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top