首页 >  知识中心 >  新闻详情

在多继承构造函数定义中 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.学员,学生

 
相关新闻
安全生产标准化的定义是什么 安全生产标准化定义 06-24
土工布 土工布的定义 07-03
氮化硼表面处理 表面处理的分类和定义 07-10
外包装的定义 包装的定义? 07-18
品质因数 品质因数的定义是什么? 07-19
内联函数定义 内联函数是什么? 07-24
在多继承构造函数定义中 C++中单一继承下的构造函数怎么在类外定义? 多重继承的呢? 求详... 07-24
构造函数是内联函数吗 [转载]为什么内联函数,构造函数,静态成员函数不能为 07-24
内联函数的定义 内联函数是什么? 07-24
长期喝柠檬水的坏处 每天喝柠檬水有什么好处和坏处? 08-19
相关产品
登车桥厂家直销自定义大吨位物流码头集装箱卸货平台 电动液压登车桥 06-12
Q345B-Z15性能中板Z25中板Z35中板 06-12
大量出售二手压片机 沸腾干燥机 二手制药设备 32冲旋转压片机 07-04
中路联 自动上料搅拌机 07-13
厂家直销 中/高压空压机 07-20
2017秋冬中国风立领裙摆中长款双面呢羊绒大衣 羊毛呢外套 07-23
vivoY89手机壳钢化玻璃Y91防摔自定义情侣照文字Y83二维码打印Y71 07-25
vivoY89钢化玻璃手机壳情侣小祖宗Y91自定义照片来图定制97保护套 07-25
vivoY89钢化玻璃手机壳Y93自定义情侣照Y95来图定制保护套Y71镜面 07-25
乐山中液压打夯机租赁 07-27

大家都在看