虚继承,共同的父类,需要显示调用父类的非默认构造函数?

#include<iostream>
using namespace std;

class Array
{
public:
Array()
{
len = 0;
elems = NULL;
}
Array(int len_c , int * elems_c ){
len=len_c;
elems=elems_c;

cout<<"len in Array is "<< len <<endl;
}
~Array(){
}
int length() const;
int at(int i) const{
return *(elems + 1);
}
int & at(int i){
return (*(elems + i));
}
void print() const{
for(int i = 0;i < len;i++){
cout<<at(i)<<" ";
}
cout<<endl;
}
protected:
int len;
int * elems;
};

class ChkArray:virtual public Array
{
public:
ChkArray(int len_c ,int * elems_c ):Array(len_c,elems_c){
}
int at(int i) const{
return *(elems + i);
}
int & at(int i){
return (*(elems + i));
}
public:
bool BorderCheck(int i) const{
if(i >= len){
cout<<"下标越界";
cout<<endl;
return false;
} else {
cout<<"下标没有越界";
cout<<endl;
return true;
}
}
void print() const{
for(int i = 0;i < len;i++){
cout<<at(i)<<" ";
}
cout<<endl;
}
};

class SortArray:virtual public Array
{
public:
SortArray(int len_c , int * elems_c ):Array(len_c,elems_c){
}
void sort(bool asc = true){
//冒泡排序
for(int i = 0;i < len;i++){
for(int j = 0;j < len - i - 1;j++){
if(at(j) > at(j + 1)){
int temp;
temp = at(j);
at(j) = at(j + 1);
at(j + 1) = temp;
}
}
}
}
void print() const{
for(int i = 0;i < len;i++){
cout<<at(i)<<" ";
}
cout<<endl;
}
};

class ChkSrtArray:public ChkArray,public SortArray
{
public:
ChkSrtArray(int len_c , int * elems_c ):ChkArray(len_c,elems_c),SortArray(len_c,elems_c),Array(len_c,elems_c)
{
cout<<"ChkSrtArray construct!"<<endl;
}
void print() const{
for(int i = 0;i < len;i++){
cout<<at(i)<<" ";
}
cout<<endl;
}
};

int main()
{
int Arr[] = {9,23,7,5,13,6,8,12,17};


cout<<"排序前:";
cout<<endl;
ChkSrtArray arr(9,Arr);
arr.print();

cout<<"排序后:";
cout<<endl;
arr.sort();
arr.print();

int i;
cout<<"输入要访问元素的下标:";
cin>>i;
if(arr.BorderCheck(i) == true)
{
cout<<arr.at(i);
cout<<endl;
}

return 0;
}

posted @ 2012-11-08 17:29  10,000 hours coder  阅读(378)  评论(0编辑  收藏  举报