程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C++ >> 關於C++ >> C++中必須要知道的知識

C++中必須要知道的知識

編輯:關於C++
//深入理解一下繼承以及虛函數的空間大小
#include 

using namespace std;

class A
{
    char A[100];
};
class B:public A
{
    char B[100];
};
class C:public A
{
    char C[100];
};
class D:public B,public C
{
    char D[100];
};

//對其它類的虛繼承
class E:public virtual A
{
    char E[100];
};
class F:public virtual B
{
    char F[100];
};

//函數傳參獲取數組長度的方法
template
void printArrLength(T (&C)[N])
{
    cout << "C[] spare mem space is " << sizeof(C) << endl;
    cout << "C[] length is " << N << endl;
    cout << "The array typebyte is " << sizeof(C)/N << endl;
}

/*
詳細的講解
虛繼承:在繼承定義中包含了virtual關鍵字的繼承關系
虛基類:在虛函數體系中的,通過virtual繼承而來的基類,需要注意的是:
class CSubClass:public virtual CBase {};
其中,CBase稱為CSubClass的虛基類,而不是說CBase就是個虛基類
*/
struct CBaseClass1
{
    CBaseClass1(size_t n):m_val(n) {}
public:
    size_t m_val;
};

struct CSubClassV1:public virtual CBaseClass1
{
    CSubClassV1(size_t n):CBaseClass1(n) {}
};

struct CSubClassV2:public virtual CBaseClass1
{
    CSubClassV2(size_t n):CBaseClass1(n) {}
};

struct CDiamondClass1:public CSubClassV1,public CSubClassV2
{
    CDiamondClass1(size_t n):CBaseClass1(n),CSubClassV1(n),CSubClassV2(n) {}
};

struct CDiamondSubClass1:public CDiamondClass1
{
    CDiamondSubClass1(size_t n):CBaseClass1(n),CDiamondClass1(n) {}
};

//函數指針
void fa() { cout << "hello fa" << endl; }
void fb() { cout << "hello fb" << endl; }
void fc() { cout << "hello fc" << endl; }

//定義函數指針,返回類型為void,參數傳遞為void
typedef void (*funcptr)(void);


//在堆區產生二維數組
void new2DArray(int x,int y)
{
    int ** p=new int*[y];
    for(int i=0;i(pd);
    B* pb = dynamic_cast(pd);

    cout << (int)(void*)pc << endl;
    cout << (int)(void*)pb << endl;
    cout << (int)(void*)pc - (int)(void*)pb << endl;//200

    //測試獲取數組長度
    int p[]={1,2,3,4,5};
    printArrLength(p);

    //函數指針的測試部分
    funcptr fp;
    char choosefunc;
    cin >> choosefunc;
    switch(choosefunc)
    {
    case 'a':
        fp=&fa;
        break;
    case 'b':
        fp=&fb;
        break;
    case 'c':
        fp=fc;
        break;
    default:
        break;
    }
    //這裡別忘了調用
    (*fp)();

    //測試二維數組的產生
    new2DArray(4,5);
    return 0;
}
  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved