首页 > 解决方案 > 类继承并将值传递给派生类

问题描述

我对 c++ 完全陌生,并试图学习类的继承。当我构建一个数组并尝试以数组作为参数调用派生类时,传递值更改为 0。我不知道为什么。请帮忙 !谢谢 。

当我运行 main 时,它应该显示 1.5, 2.5,3.5 , 4.5, 5.5,但它显示 1.5 2.5 0 4.5 5.5 我在 main 中尝试了 cout nums[2] ,它显示 3.5 ,我不知道为什么什么时候B obj 被调用,它变为 0 。这是代码:

#include "B_double.hpp"
#include <iostream>
#include <string>

using namespace std;



int main() {
  double nums[5] = {1.5, 2.5,3.5 , 4.5, 5.5};
  cout << nums[2]<< endl;


  B_double myObj(nums, 6);
  myObj.printBuffer();

  return 0;
}

#ifndef A_H_
#define A_H_

#include <iostream>
using namespace std ;

class A{
protected :
    int * x ;
private :
    void initialize (int);
    void cleanup();
public:
    A(int i);
    virtual ~A();
    int getX()const;
    void setX(int);
};
#endif /* A_H_ */
#include "A.h"
using namespace std ;

void A::initialize(int i){
    x = new int(i);
}

void A:: cleanup(){
    delete x;
}

A::A(int i){

    *x = 0 ;
    initialize (i);
}

A::~A(){
    cleanup();
}

int A:: getX()const{
    return *x;
}

void A:: setX(int i){
    *x = i;
}
#ifndef B_DOUBLE_HPP_
#define B_DOUBLE_HPP_

#include<iostream>
#include "A.h"

using namespace std ;


class B_double : public A{
private :
    double buffer[5];
public:
    B_double( double* , int i);
    void printBuffer()const;


};

#endif /* B_HPP_ */
B_double::B_double(double* arr, int i): A(i){



for ( int m = 0 ; m<5; m++){
    cout << arr[m] << endl;
}

    for ( int j = 0 ; j<5; j++){
        buffer[j] = arr[j];
        cout <<buffer[j]<< ",";
    }

}



void B_double::printBuffer()const{
    for (int i = 0 ; i< 5 ; i++){
        cout << this->buffer[i]<<",";
    }
}
#ifndef B_DOUBLE_HPP_
#define B_DOUBLE_HPP_

#include<iostream>
#include "A.h"

using namespace std ;


class B_double : public A{
private :
    double buffer[5];
public:
    B_double( double* , int i);
    void printBuffer()const;


};

#endif /* B_HPP_ */
B_double::B_double(double* arr, int i): A(i){



for ( int m = 0 ; m<5; m++){
    cout << arr[m] << endl;
}

    for ( int j = 0 ; j<5; j++){
        buffer[j] = arr[j];
        cout <<buffer[j]<< ",";
    }

}



void B_double::printBuffer()const{
    for (int i = 0 ; i< 5 ; i++){
        cout << this->buffer[i]<<",";
    }
}

标签: c++classinheritance

解决方案


推荐阅读