c++的继承问题
- 提问者网友:王者佥
- 2021-04-29 01:45
class B
{
public:
B();
B(int i);
~B();
void print() const;
private :
int b;
};
B::B()
{
b=0;
cout<<"B's default constructor called."<<endl;
}
B::B(int i)
{
b=i;
cout<<"B's construnctor called."<<endl;
}
B::~B()
{
cout<<"B's destructor called."<<endl;
}
void B::print() const
{
cout<<b<<endl;
}
class C:public B
{
public :
C();
C(int i,int j);
void print() const;
private :
int c;
};
C::C()
{
c=0;
cout<<"C's default constructr called."<<endl;
}
C::C(int i,int j):B(i)
{
c=j;
cout<<"C's constructor called."<<endl;
}
C::~C()
{
cout<<"C's destructor called."<<endl;
}
void C::print() const
{
B::print();
cout<<c<<endl;
}
void main()
{
C obj(5,6);
obj.print();
}
请问这个程序错在哪里??还有顺便请问下,常对象只能调用常成员函数,但反过来说常成员函数只能用常对象调用吗???
- 五星知识达人网友:摆渡翁
- 2021-04-29 02:42
将C::~C()
{
cout<<"C's destructor called."<<endl;
}
这个析构函数删除不要用(already has a body)
析构继承可能不行!
常成员函数用常对象来调用!
- 1楼网友:胯下狙击手
- 2021-04-29 04:28
主要是:类 C 的析构函数,没有定义,虽然,系统有预定义的函数,但是也是要定义的:
#include <iostream.h> class B { public: B(); B(int i); ~B(); void print() const; private : int b; }; B::B() { b=0; cout<<"B's default constructor called."<<endl; } B::B(int i) { b=i; cout<<"B's construnctor called."<<endl; } B::~B() { cout<<"B's destructor called."<<endl; }
void B::print() const { cout<<b<<endl; }
class C:public B { public : C(); C(int i,int j); ~C(); //<------------ void print() const;
private : int c; }; C::C() { c=0; cout<<"C's default constructr called."<<endl; } C::C(int i,int j):B(i) { c=j; cout<<"C's constructor called."<<endl; } C::~C() { cout<<"C's destructor called."<<endl; } void C::print() const { B::print(); cout<<c<<endl; } void main() { C obj(5,6); obj.print(); } 另外,你所说的常对象是指什么呢?是有对象先,之后才可以调用函数的,你的代码main()中类 C创建的一个对象 obj ,本身就不是一个常对象,他可以调用常函数 void print(),所以,常成员函数只能用常对象调用的,很明显错的!
- 2楼网友:逃夭
- 2021-04-29 04:09