关于子对象的派生类的一个小迷惑

老猫也很爱吃鱼 2016-08-08 08:58:51
请问大家,为什么书上一个正常派生类和基类需要写析构函数,而包含子对象的派生类和基类的构造函数就不用写析构函数了呢???求指点
...全文
125 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
qq_32953509 2016-08-09
  • 打赏
  • 举报
回复
那要看你用没用动态变量,用了就要重写,没用一般系统有默认的
paschen 2016-08-09
  • 打赏
  • 举报
回复
如果不写编译器会生成一个默认的
paschen 2016-08-09
  • 打赏
  • 举报
回复
引用 4 楼 weixin_35755166 的回复:
 class student
 {
public :
        student(int n,string nam,char s):num(n),name(nam),sex(s){}
        ~student(){}//派生类析构函数
protected :
        int num;
        string name;//c++字符串类型
        char sex;
};
class student1:public student
{
public :
        student1(int n,string nam,char s,int a,string ad):student(n,nam,s)
        {
                age=a;
                add=ad;
        }
        student1(int n,string nam,char s,int a,string ad):student(n,nam,s),age(a),add(ad){}
        void show();
        ~student1(){}//派生类析构函数
private :
        int age;
        string add;
};
---------------------------------------------------------------------------------------------------------------------------------------------------------
#include <iostream>
#include <string>
using namespace std;
class student
{
public :
       student(int n,string nam):num(n),name(nam){}
       void dis();
protected:
        int num;
        string name;
};
void student::dis()
{
        cout<<num<<endl<<name<<endl;
}
class student1: public student
{
public :
        student1(int n,string nam,int n1,string nam1,int a,string ad):student(n,nam),monitor(n1,nam1),age(a),add(ad){}
        void dis_()
        {
            cout<<age<<endl<<add<<endl;
            dis();
        }
private :
        student monitor;
        int age;
        string add;
};
请问这两个代码为什么一个需要写一个不需要写呢
上面的也可以不写
  • 打赏
  • 举报
回复
 class student
 {
public :
        student(int n,string nam,char s):num(n),name(nam),sex(s){}
        ~student(){}//派生类析构函数
protected :
        int num;
        string name;//c++字符串类型
        char sex;
};
class student1:public student
{
public :
        student1(int n,string nam,char s,int a,string ad):student(n,nam,s)
        {
                age=a;
                add=ad;
        }
        student1(int n,string nam,char s,int a,string ad):student(n,nam,s),age(a),add(ad){}
        void show();
        ~student1(){}//派生类析构函数
private :
        int age;
        string add;
};
---------------------------------------------------------------------------------------------------------------------------------------------------------
#include <iostream>
#include <string>
using namespace std;
class student
{
public :
       student(int n,string nam):num(n),name(nam){}
       void dis();
protected:
        int num;
        string name;
};
void student::dis()
{
        cout<<num<<endl<<name<<endl;
}
class student1: public student
{
public :
        student1(int n,string nam,int n1,string nam1,int a,string ad):student(n,nam),monitor(n1,nam1),age(a),add(ad){}
        void dis_()
        {
            cout<<age<<endl<<add<<endl;
            dis();
        }
private :
        student monitor;
        int age;
        string add;
};
请问这两个代码为什么一个需要写一个不需要写呢
转角天边 2016-08-08
  • 打赏
  • 举报
回复
都要写,没写只是用编译器默认生成的

33,311

社区成员

发帖
与我相关
我的任务
社区描述
C/C++ 新手乐园
社区管理员
  • 新手乐园社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧