Rumah >pembangunan bahagian belakang >C++ >Bagaimanakah Saya Boleh Mengakses Pembolehubah Diwarisi daripada Kelas Induk Templat dalam C?

Bagaimanakah Saya Boleh Mengakses Pembolehubah Diwarisi daripada Kelas Induk Templat dalam C?

DDD
DDDasal
2024-12-20 10:34:16773semak imbas

How Can I Access Inherited Variables from Templated Parent Classes in C  ?

Mengakses Pembolehubah Diwarisi daripada Kelas Induk Templat

Sebagai tindak balas kepada pertanyaan berkenaan kebolehaksesan berubah dalam kelas induk templat, adalah penting untuk menjelaskan bahawa pengkompil GNU C moden, bermula dari versi 3.4.6, mematuhi piawaian C dengan ketat. Ia menentukan bahawa nama yang tidak layak dalam templat selalunya tidak bergantung. Akibatnya, menyelesaikan nama-nama ini pada masa definisi templat menjadi tidak dapat dilaksanakan kerana sifat pengkhususan kelas asas bergantung yang tidak diketahui, seperti dalam coretan kod yang disediakan:

template<class T> class Foo
{
public:
  Foo() { a = 1; }

protected:
  int a;
};

template<class T> class Bar : public Foo<T>
{
public:
  Bar() { b = 4; };

  int Perna(int u);

protected:
  int b;

};

template<class T> int Bar<T>::Perna(int u) 
{ 
  int c = Foo<T>::a * 4; // This works
  return (a + b) * u;    // This doesn't
}

Tingkah laku ini berpunca daripada keperluan untuk mengenal pasti nama yang tidak layak semasa definisi templat, yang tidak mungkin untuk kelas asas bergantung kerana potensi pengkhususan masa hadapan. Oleh itu, percubaan untuk mengakses pembolehubah dilindungi 'a' tidak layak dalam kaedah 'Perna' 'Bar' akan mengakibatkan ralat.

Untuk memintas pengehadan ini, perlu menggunakan nama layak 'Foo

using Foo<T>::a;

int c = a * 4; // Now valid

Selain itu, nama fungsi tidak layak yang diisytiharkan dalam kelas asas juga tertakluk kepada sekatan ini. Untuk mengakses fungsi sedemikian, seseorang mesti sama ada menggunakan nama yang layak atau memberikan pengisytiharan 'menggunakan'.

Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Mengakses Pembolehubah Diwarisi daripada Kelas Induk Templat dalam C?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn