欢迎来到朵拉利品网
知识中心
资讯
  • 资讯
  • 产品
  • 供应商
您的位置: 朵拉利品网 >  知识中心 > 在多继承构造函数定义中 C++中单一继承下的构造函数怎么在类外定义? 多重继承的呢? 求详...
在多继承构造函数定义中 C++中单一继承下的构造函数怎么在类外定义? 多重继承的呢? 求详...
2019-07-24 20:23:00 来源:朵拉利品网

1, C++中单一继承下的构造函数怎么在类外定义? 多重继承的呢? 求详...



class Employee
{
public:
Employee(int n,char *na)
{
no=n;
name=new char [strlen(na)+1];
if(name!=NULL)
{
strcpy(name,na);
}
}//基类的构造函数
protected:
int no;
char *name;
double salary;
};
class Cmanager:virtual public Employee
{
public:
//
Cmanager(int n,char *na);
protected:
double monthsalary;
};
Cmanager::Cmanager(int n,char *na): Employee(n,na)
{
monthsalary=8500;
}
这是在类外用参数列表实现

2, c++语法问题 (继承的构造函数定义)



1.Student stu[100];//学生数组
你定义了Student的数组,就必须给Student这个类型一个默认的构造函数,你这里没有提供。
2.Teacher类里面有很多count变量你达成了cout
3.for(int i=0;i
你错误的访问了student的私有成员。
我帮你改成可编译的,你看看哪里不符合需求的可以追问
#include
#include
using namespace std;
class Person
{
protected:
string name;
int age;
public:
Person(string p_name, int p_age):
name(p_name),age(p_age){}
void display()
{
cout}
};
class Student:public Person
{
private:
int ID;
float cpp_score;
float cpp_count;
public:
float cpp_grade; //改为public以供Teacher调用
public:
Student(string a = "",int b=0,int c=0,float d=0,float e=0): //添加默认值,以提供Student类的默认构造函数
Person(a,c),ID(b),cpp_score(d),cpp_count(e),cpp_grade(cpp_score*0.9+cpp_count*2){}
~Student(){};
void print()
{
coutcout.setf(ios::fixed);
cout.precision(1);
cout}
};
class Teacher:public Person
{
private:
int ID;//教师工号
Student stu[100];//学生数组
int count;//学生数目,最多不超过100
float cpp_average;//班级cpp平均分
public:
Teacher(string a,int b,int c)
:Person(a,c),ID(b){}
void Add (Student & stu1)
{
stu[count]=stu1;
count++;
}
void average()
{
for(int i=0;icpp_average/=count;
}
void print()
{
coutfor(int i=0;i{
stu[i].print();
}
}
};
int main()
{
return 0;
}

3, java的继承中的构造方法



java继承中对构造函数是不继承的,只是调用(隐式或显式)。
举例说明:
public class FatherClass {
public FatherClass() {
System.out.println(100);
}
public FatherClass(int age) {
System.out.println(age);
}
}
public class SonClass extends FatherClass{
public SonClass() {
}
public SonClass(int c) {
System.out.println(1234);
}
public static void main(String[] args) {
SonClass s = new SonClass(66);
}
}
编译后执行结果如下:
分析:SonClass s = new SonClass(66);
执行这句时,调用
public SonClass(int c) {
System.out.println(1234);//系统会自动先调用父类的无参构造函数(super())
}
在这个构造函数中,等价于
public SonClass(int c) {
super();//必须是第1行,否则不能编译
System.out.println(1234);
}
所以结果是 100 1234
在创建子类的对象时,Java虚拟机首先执行父类的构造方法,然后再执行子类的构造方法。在多级继承的情况下,将从继承树的最上层的父类开始,依次执行各个类的构造方法,这可以保证子类对象从所有直接或间接父类中继承的实例变量都被正确地初始化。
3.如果子类构造函数是这样写的
public SonClass(int c) {
super(22);//必须是第1行,否则不能编译
//显式调用了super后,系统就不再调用无参的super()了;
System.out.println(1234);
}
执行结果是 22
1234
总结1:构造函数不能继承,只是调用而已。
如果父类没有无参构造函数
创建子类时,不能编译,除非在构造函数代码体中第一行,必须是第一行显式调用父类有参构造函数
如下:
SonClass (){
super(777);//显示调用父类有参构造函数
System.out.println(66);
}
如果不显示调用父类有参构造函数,系统会默认调用父类无参构造函数super();
但是父类中没有无参构造函数,那它不是不能调用了。所以编译就无法通过了。
总结2:创建有参构造函数后,系统就不再有默认无参构造函数。
如果没有任何构造函数,系统会默认有一个无参构造函数。

相关概念


int

INT是将一个数值向下取整为最接近的整数的函数。INT是数据库中常用函数中的取整函数,常用来判别一个数能否被另一个数整除。

cpp

C++,这个词在中国大陆的程序员圈子中通常被读做“C加加”,而西方的程序员通常读做“C plus plus”,它是一种使用非常广泛的计算机编程语言。C++是一种静态数据类型检查的,支持多重编程范式的通用程序设计语言。它支持过程化程序设计、数据抽象、面向对象程序设计、泛型程序设计等多种程序设计风格。

Student

1.研究生2.学员,学生