默认构造函数-类构造函数的问题(继承)

问题描述

类构造函数的问题(继承)

#include <iostream>

using namespace std;

class People
{

protected:
    char name[20],xb[10],id[21];
    int num,all,week;

public:People()
      {
      }

public:People(char na[20],int nu,char x[10],char idc[21],int al,int wk)
      {
          strcpy_s(name,na);
          num=nu;
          strcpy_s(xb,x);
          strcpy_s(id,idc);
          all=al;
          week=wk;
      }
      virtual void show()
      {
          cout<<name<<'t'<<num<<'t'<<xb<<endl<<id<<'t'<<all<<'t'<<week<<endl;
      }
};
//学生
class Student: virtual public People
{
public:
    Student(char na[20],int nu,char x[10],char idc[21],int al,int wk){};
};

//教师
class Teacher:virtual public People
{

protected:
    int teach;

public:
    Teacher(char na[20],int nu,char x[10],char idc[21],int al,int wk,int tean);
    void show()
    {
        cout<<name<<'t'<<num<<'t'<<xb<<endl<<id<<'t'<<all<<'t'<<week<<'t'<<teach<<endl;
    }
};

Teacher::Teacher(char na[20],int nu,char x[10],char idc[21],int al,int wk,int tean):People(na,nu,x,idc,al,wk)
{
    teach=tean;
};

class Graduate:virtual public Student
{
protected:
    char project[30];

public:
    Graduate(char na[20],int nu,char x[10],char idc[21],int al,int wk,char pro[30]):Student(na,nu,x,idc,al,wk)
    {
        strcpy_s(project,pro);
    }
    void show()
    {
        cout<<name<<'t'<<num<<'t'<<xb<<endl<<id<<'t'<<all<<'t'<<week<<'t'<<project<<endl;
    }
};
class Ta:public Graduate ,public Teacher
{
protected:
    char project[30];
    int teachT;

public:
    Ta(char na[20],int nu,char x[10],char idc[21],int al,int wk,char proT[30],int teaT):Student(na,nu,x,idc,al,wk)
    {
        strcpy_s(project,proT);
        teachT=teaT;
    }
    void show()
    {
        cout<<name<<'t'<<num<<'t'<<xb<<endl<<id<<'t'<<all<<'t'<<week<<'t'<<project<<'t'<<teach<<endl;
    }
};

int main() {
    People pe("kkjl",5,"xkjkj","idcxxxx",5,6);
    pe.show();

    Teacher tr("kkjl",5,"xkjkj","idcxxxx",5,6,7);

    tr.show();

    Graduate gd("kkjl",5,"xkjkj","idcxxxx",5,6,"proxxxxx");
    gd.show();

    return 0;
}

我想问TA类的构造函数哪里错了呢?
它说“Graduate”: 没有合适的默认构造函数可用..“Teacher”: 没有合适的默认构造函数可用
还有..gd.show(); 输出的数据为什么会溢出呢?..
T^T求高手帮忙,,我研究半天了,,还是不懂..
谢谢了T^T

解决方案

在每个子类的构造函数增加一句Base()。

时间: 2024-10-26 15:45:15

默认构造函数-类构造函数的问题(继承)的相关文章

c++类构造函数详解

  这篇文章主要介绍了c++类构造函数示例,需要的朋友可以参考下        代码如下: //一. 构造函数是干什么的 /* 类对象被创建时,编译系统对象分配内存空间,并自动调用该构造函数->由构造函数完成成员的初始化工作 eg: Counter c1; 编译系统为对象c1的每个数据成员(m_value)分配内存空间,并调用构造函数Counter( )自动地初始化对象,初始化之后c1的m_value值设置为0 故:构造函数的作用:初始化对象的数据成员.*/ class Counter { pu

模板类构造函数与析构函数无法访问私有成员(明明就是公有的)

问题描述 模板类构造函数与析构函数无法访问私有成员(明明就是公有的) 模板类构造函数与析构函数无法访问私有成员(明明就是公有的) 写成这样: #ifndef __SINGLETON__H__ #define __SINGLETON__H__ template <typename T> class Worker; template <typename T> class Singleton { friend class Worker<T>; public: static T

解析C++中构造函数的默认参数和构造函数的重载_C 语言

C++构造函数的默认参数 和普通函数一样,构造函数中参数的值既可以通过实参传递,也可以指定为某些默认值,即如果用户不指定实参值,编译系统就使形参取默认值. [例] #include <iostream> using namespace std; class Box { public : Box(int h=10,int w=10,int len=10); //在声明构造函数时指定默认参数 int volume( ); private : int height; int width; int l

c++类构造函数详解_C 语言

复制代码 代码如下: //一. 构造函数是干什么的 /*   类对象被创建时,编译系统对象分配内存空间,并自动调用该构造函数->由构造函数完成成员的初始化工作     eg: Counter c1;      编译系统为对象c1的每个数据成员(m_value)分配内存空间,并调用构造函数Counter( )自动地初始化对象,初始化之后c1的m_value值设置为0      故:构造函数的作用:初始化对象的数据成员.*/       class Counter       {      publ

解决PHP4.0 和 PHP5.0类构造函数的兼容问题

以下是对解决PHP4.0和PHP5.0类构造函数兼容问题的方法进行了详细的分析介绍,需要的朋友可以过来参考一下   在 PHP5.0 以上版本里,还兼容了 4.0 版本的构造函数的定义规则.如果同时定义了4.0的构造函数和 __construct()函数,则__construct() 函数优先. 为了使类代码同时兼容 PHP4.0 和 5.0,可以采取以下的方式: 复制代码 代码如下: <?php class MyClass {  function __construct() { //for P

uml-UML图中怎么表达C++中派生类构造函数?

问题描述 UML图中怎么表达C++中派生类构造函数? 主要是构造函数中对基类成员初始化问题: 例如下面这句,请问怎么在UML中写出来? Teacher(string name,int age,string department,string teacherNumber):Person(name,age) 我写的是: +Teacher(name : string ,age : int ,department : string ,teacherNumber : string ):Person(nam

c++-C++类构造函数初始化列表

问题描述 C++类构造函数初始化列表 #include using namespace std; class A { private: int n1; int n2; public: A() { n2=0; n1=n2+2; }//输出结果为:n1:2, n2: 0 A():n2(0),n1(n2+2){}//输出结果为n1:-858993458, n2: 0 //上面这两种方式有啥区别,求指导,为啥结果不一样 void Print(){ cout << "n1:" <

C++语言基础 例程 带默认参数的构造函数

贺老师的教学链接  本课讲解 使用默认参数的构造函数 #include <iostream> using namespace std; class Time { public: Time( ); Time(int h,int m=0,int s=0); void show_time( ); private: int hour; int minute; int sec; }; Time::Time( ) { hour=0; minute=0; sec=0; } Time::Time(int h,

Python类的定义、继承及类对象使用方法简明教程

  这篇文章主要介绍了Python类的定义.继承及类对象使用方法简明教程,本文用浅显易懂的语言讲解了类的定义.继承及类对象的使用,非常实用易懂,需要的朋友可以参考下 Python编程中类的概念可以比作是某种类型集合的描述,如"人类"可以被看作一个类,然后用人类这个类定义出每个具体的人--你.我.他等作为其对象.类还拥有属性和功能,属性即类本身的一些特性,如人类有名字.身高和体重等属性,而具体值则会根据每个人的不同;功能则是类所能实现的行为,如人类拥有吃饭.走路和睡觉等功能.具体的形式如