C++子类有构造函数为何还继承父类的构造函数
我写的程序#include<iostream>#include"laoyouwei.h"usingnamespacestd;voidwo(you&ou){ou.show(...
我写的程序
#include<iostream>
#include"laoyouwei.h"
using namespace std;
void wo(you &ou)
{
ou.show();
}
void main()
{
you a;
youwei b;
laoyouwei c;
c.show();
wo(a);
cout<<endl;
wo(b);
cin.get();
cin.get();
}
//you.h
#ifndef _YOU_
#define _YOU_
class you
{protected:
int xuehao;
public:
you();
virtual void show();
};
#endif
//you.cpp
#include<iostream>
#include"you.h"
using namespace std;
you::you()
{
int team;
cout<<"来吧,输入";
cin>>team;
xuehao=team;
}
void you::show()
{
cout<<"出来吧"<<xuehao;
}
//youwei.h
#ifndef _YOUWEI_H
#define _YOUWEI_H
#include"you.h"
class youwei:public you
{protected:
int xuexi;
public:
youwei();
void show();
};
#endif
//youwei.cpp
#include <iostream>
#include"youwei.h"
using namespace std;
youwei::youwei()
{
int team1;
cout<<"再次输入吧!";
cin>>team1;
xuexi=team1;
xuehao=1;
}
void youwei::show()
{
cout<<"又出来啦"<<xuexi;
}
//laoyouwei.h
#ifndef YOUWEI_H_
#define YOUWEI_H_
#include"youwei.h"
class laoyouwei:public youwei
{
int ll;
public:
laoyouwei();
void show();
};
#endif
//laoyouwei.cpp
#include<iostream>
#include"laoyouwei.h"
using namespace std;
laoyouwei::laoyouwei()
{
cout<<"请输入吧.上帝!";
int uu;
cin>>uu;
ll=uu;
xuehao=0;
xuexi=1;
}
void laoyouwei::show()
{
cout<<endl<<"出现吧你!!"<<ll;
}
//这个程序运行的话
声明you的时候,它先或调用you的构造函数
声明youwei的时候,它又调用you的构造函数,再调用youwei的构造函数
声明laoyouwei的时候,它又调用you的构造函数,再调用youwei的构造函数,再才调用laoyouwei的构造函数
不是说子类有自己的构造函数的时候就不会调用父类的构造函数么
为什么我写的程序它还要调用自己父类的
那我如何让子类不去自动调用父类的构造函数
我已经帮父类的改为保护类了..还是不行.他还是要继承 展开
#include<iostream>
#include"laoyouwei.h"
using namespace std;
void wo(you &ou)
{
ou.show();
}
void main()
{
you a;
youwei b;
laoyouwei c;
c.show();
wo(a);
cout<<endl;
wo(b);
cin.get();
cin.get();
}
//you.h
#ifndef _YOU_
#define _YOU_
class you
{protected:
int xuehao;
public:
you();
virtual void show();
};
#endif
//you.cpp
#include<iostream>
#include"you.h"
using namespace std;
you::you()
{
int team;
cout<<"来吧,输入";
cin>>team;
xuehao=team;
}
void you::show()
{
cout<<"出来吧"<<xuehao;
}
//youwei.h
#ifndef _YOUWEI_H
#define _YOUWEI_H
#include"you.h"
class youwei:public you
{protected:
int xuexi;
public:
youwei();
void show();
};
#endif
//youwei.cpp
#include <iostream>
#include"youwei.h"
using namespace std;
youwei::youwei()
{
int team1;
cout<<"再次输入吧!";
cin>>team1;
xuexi=team1;
xuehao=1;
}
void youwei::show()
{
cout<<"又出来啦"<<xuexi;
}
//laoyouwei.h
#ifndef YOUWEI_H_
#define YOUWEI_H_
#include"youwei.h"
class laoyouwei:public youwei
{
int ll;
public:
laoyouwei();
void show();
};
#endif
//laoyouwei.cpp
#include<iostream>
#include"laoyouwei.h"
using namespace std;
laoyouwei::laoyouwei()
{
cout<<"请输入吧.上帝!";
int uu;
cin>>uu;
ll=uu;
xuehao=0;
xuexi=1;
}
void laoyouwei::show()
{
cout<<endl<<"出现吧你!!"<<ll;
}
//这个程序运行的话
声明you的时候,它先或调用you的构造函数
声明youwei的时候,它又调用you的构造函数,再调用youwei的构造函数
声明laoyouwei的时候,它又调用you的构造函数,再调用youwei的构造函数,再才调用laoyouwei的构造函数
不是说子类有自己的构造函数的时候就不会调用父类的构造函数么
为什么我写的程序它还要调用自己父类的
那我如何让子类不去自动调用父类的构造函数
我已经帮父类的改为保护类了..还是不行.他还是要继承 展开
展开全部
所谓继承,就是指子类“是一种”基类。所以子类一定会具备基类的所有特征。
子类无法访问基类的私有成员,所以必须调用父类的构造函数来初始化父类的成员。
对於子类来说,它不是“不会调用父类的构造函数”,而是“隠藏”了它。必要时候,你还是可以用特殊方法显式调用的。
为了达到你的目的,你有两个选择:
一,为基类提供一个怠工(dummy)构造函数,不作为。
二,声明为虚函数。
BTW,构造函数唯一的目的在於初始化对象。获取资源而不初始化,有悖RAII原则。所以基本上,第一种情况不大可能出现。
子类无法访问基类的私有成员,所以必须调用父类的构造函数来初始化父类的成员。
对於子类来说,它不是“不会调用父类的构造函数”,而是“隠藏”了它。必要时候,你还是可以用特殊方法显式调用的。
为了达到你的目的,你有两个选择:
一,为基类提供一个怠工(dummy)构造函数,不作为。
二,声明为虚函数。
BTW,构造函数唯一的目的在於初始化对象。获取资源而不初始化,有悖RAII原则。所以基本上,第一种情况不大可能出现。
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
就是这样的阿
实例一个子类的时候,也会实例一个父类的,我是这么理解的
实例一个子类的时候,也会实例一个父类的,我是这么理解的
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询
广告 您可能关注的内容 |