-6
C는 C++에 대한 새로운 내용입니다. C 클래스의 기본 ctor와 cctor를 구현해야하는 과제가있어서 "c :: ctor"와 "c :: cctor"가 각각 인쇄됩니다. 이 문제를 어떻게 처리해야할지 모르겠다면 도움을 받으실 수 있습니다.ctor 및 상속에 관하여
#include <iostream>
#include <string>
using namespace std;
class a {
public:
a(const char* sname)
: _sname(sname) {
cout << "a::ctor" << endl;
}
a(const a& s) { cout << "a::copy ctor" << endl; }
virtual ~a() { cout << "a::dtor " << endl; }
void f1() { cout << "a::f1()" << endl; f2(); }
virtual void f2() = 0;
private:
string _sname;
};
class b1 : virtual public a {
public:
b1(const char* saname, const char* ssname)
: _sname1(saname), a(ssname) {
}
b1(const b1& b1) : a(b1) { cout << "b1 :: copy ctor << endl"; }
~b1() { cout << "b1::dtor" << endl; }
virtual void f1() { cout << "b1::f1()" << endl; }
virtual void f2() { cout << "b1::f2()" << endl; }
virtual void f3() { cout << "b1::f3()" << endl; }
private:
string _sname1;
};
class b2 : virtual public a {
public:
b2(const char* saname, const char* ssname)
: _sname2(saname), a(ssname) {
cout << "b2::ctor" << endl;
}
b2(const b2& b2) : a(b2) { cout << "b2::copy ctor" << endl; }
~b2() { cout << "b2::dtor" << endl; }
virtual void f3() { f1(); cout << "b2::f3()" << endl; }
private:
string _sname2;
};
class c : public b1, public b2 {
public:
c();
c(const c& c);
~c() { cout << "c::dtor" << endl; }
virtual void f1() { a::f1(); cout << "c::f1()" << endl; }
void f3() { cout << "c::f3()" << endl; }
};
이해가 안됩니다. 'a1, b1, b2' 클래스에는 모두 여러분의 요구 사항을 만족시키는 복사 생성자가 있습니다. 왜 'c'클래스와 같은 일을 할 수 없니? 예 :'C (const c & variable) {cout << "c :: copy constructor \ n";}' –
컴파일러는 클래스 A에 대한 기본 ctor가 없다고 말합니다. – Hellowuvrld