Разве вы не хотите:
set_data(c2.get_data());
(и сделать Class1::get_data()
функцию-члена const
)?
Но вам действительно следует использовать списки инициализации конструктора:
Class2::Class2(const Class2 &c2)
: Class1(c2)
{
}
Этот код использует сгенерированный компилятором конструктор копирования по умолчанию для Class1
.Во многих случаях вам не следует использовать конструктор копирования по умолчанию или перегрузку оператора копирования-назначения, но здесь все в порядке, поскольку единственный элемент данных Class1
является объектом int
.
Фактически, вы могли быдаже полагаться на созданный компилятором конструктор копирования по умолчанию для Class2
.
РЕДАКТИРОВАНИЕ: Вот пример кода:
#include <iostream>
class Class1{
public:
Class1() : d(0) { } // Provide a no-arg constructor to initialize `d`
int get_data() const; // Class1::get_data() is `const` because it does not change the `Class1` object.
void set_data(int);
private:
int d;
};
int Class1::get_data() const{
return d;
}
void Class1::set_data(int data){
d = data;
}
class Class2 : public Class1{
public:
Class2();
};
Class2::Class2()
: Class1()
{
}
int main() {
Class2 other_c2;
other_c2.set_data(14);
Class2 c2(other_c2);
std::cout << c2.get_data() << '\n';
}
http://codepad.org/jlplTYrH