visibility13.c
来自「linux下编程用 编译软件」· C语言 代码 · 共 111 行
C
111 行
// { dg-do assemble }// GROUPS passed visibility// visibility file// From: dinh@cs.ucla.edu (Dinh Le)// Date: Mon, 12 Jul 93 22:21:06 -0700// Subject: class, template and their scoping problem// Message-ID: <9307130521.AA18312@oahu.cs.ucla.edu>#include <iostream>#include <cassert>// --------------- Array.h && Array.cc ------------------using namespace std;const int ArraySize = 12;template <class Type>class Array { // { dg-error "" } .struct Array_RC redecl.*friend class Array_RC;public: Array(const Type *ar, int sz) { init(ar,sz); } virtual ~Array() { delete [] ia; } virtual void print(ostream& = cout); virtual Type& operator[](int ix) { return ia[ix]; }private: void init(const Type*, int); int size; int *ia;};template <class Type>ostream& operator<<( ostream& os, Array<Type>& ar ){ ar.print(os); return os;}template <class Type>void Array<Type>::print(ostream& os){ const int lineLength = 12; os << "( " << size << " )< "; for (int ix = 0; ix < size; ++ix) { if (ix % lineLength == 0 && ix) os << "\n\t"; os << ia[ ix ]; if (ix % lineLength != lineLength-1 && ix != size-1) os << ", "; } os << " >\n";}template <class Type>void Array<Type>::init(const Type *array, int sz){ ia = new Type[size = sz]; for (int ix = 0; ix < size; ++ix) ia[ix] = (array!=0) ? array[ix] : (Type)0;}// --------------- Array_RC.h && Array_RC.cc ----------------template <class Type>class Array_RC : public Array<Type> {public: Array_RC(const Type *ar, int sz); Type& operator[](int ix);};template <class Type>Array_RC<Type>::Array_RC(const Type *ar, int sz) : Array<Type>(ar, sz) {}template <class Type>Type &Array_RC<Type>::operator[](int ix) { assert(ix >= 0 && ix < size);// { dg-error "" } member .size.* return ia[ix];// { dg-error "" } member .ia.*}// ------------------- Test routine ----------------------template <class Type>void try_array( Array<Type> &iA ){ cout << "try_array: initial array values:\n"; cout << iA << endl;}template <class Type>inline voidtry_array( Array_RC<Type> &rc ){ try_array( ((Array<Type>&)rc) );}int main(){ static int ia[10] = { 12, 7, 14, 9, 128, 17, 6, 3, 27, 5 }; Array_RC<int> iA(ia, 10); cout << "template Array_RC class" << endl; try_array(iA); return 0;}template class Array_RC<int>;
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?