关于派生类构造函数调用基类构造函数的问题

时间:2022-09-07 21:34:13
书本上说:
1、派生类不能继承基类的构造函数!
2、实例化一个派生类的对象时, 先调用基类的构造函数去实例化从基类继承来的成员。

派生类和基类虽然有继承关系,但本质上是两个独立的类

我的问题是:
1、若派生类没有继承基类的构造函数,在派生类实例化时为什么能调用另外一个类的构造函数?
2、实例化派生类时,基类并没有被实例化,基类当时作为一个数据类型而存在,为什么基类的构造函数能被其他类所调用?

24 个解决方案

#1


1.  派生类是会继承基类的参数的,不调用基类构造函数会可能使继承来的参数没有初始化;
2.  实例化派生类时基类会先被实例化;
实际上如果基类使用默认构造函数,派生类会自动调用基类构造函数的

#2


    首先我觉得你进入一个误区了,基类作为一个类,他的构造函数本身就可以被其他类调用,不管这个类是不是他的派生类,除非这个构造函数设置成私有的了,或者protected保护的(这种情况下构造函数只能被派生类调用)。

#3


因为 

class child:public father

所以构造子类的时候必须构造父类,

#4


引用 2 楼 lilin007007 的回复:
    首先我觉得你进入一个误区了,基类作为一个类,他的构造函数本身就可以被其他类调用,不管这个类是不是他的派生类,除非这个构造函数设置成私有的了,或者protected保护的(这种情况下构造函数只能被派生类调用)。

  有问题:
 1、A、B两个类,若 A类在实例化的时候,B类没有实例化,此时A类能调用B类的构造函数吗?
 2、若A类不是B类的友员类,在A的类体中,能直接使用B类的函数吗?
 我想都不可以吧
class A
{
   public:  
   A(){...}
   private:
   int  n ;
}

class B
{
    public: 
    B();
    A::A(); //调用A类的构造函数  这样对吗? 我想除非友员才能这样吧!
    private:
    int m ;
}

#5


A::A(); 没有这样用 的

#6


1、若派生类没有继承基类的构造函数,在派生类实例化时为什么能调用另外一个类的构造函数?
    这是语言的规则呀,如果派生类没有显式调用基类的构造函数,那么编译器会生成代码自动调用基类的默认的构造函数。
2、实例化派生类时,基类并没有被实例化,基类当时作为一个数据类型而存在,为什么基类的构造函数能被其他类所调用?
在派生类中,基类的构造函数能被其派生类调用,用来初始化派生类中的基类子对象呀

#7


引用 4 楼 usa_5678 的回复:
Quote: 引用 2 楼 lilin007007 的回复:

    首先我觉得你进入一个误区了,基类作为一个类,他的构造函数本身就可以被其他类调用,不管这个类是不是他的派生类,除非这个构造函数设置成私有的了,或者protected保护的(这种情况下构造函数只能被派生类调用)。

  有问题:
 1、A、B两个类,若 A类在实例化的时候,B类没有实例化,此时A类能调用B类的构造函数吗?
 2、若A类不是B类的友员类,在A的类体中,能直接使用B类的函数吗?
 我想都不可以吧
class A
{
   public:  
   A(){...}
   private:
   int  n ;
}

class B
{
    public: 
    B();
    A::A(); //调用A类的构造函数  这样对吗? 我想除非友员才能这样吧!
    private:
    int m ;
}


你这是语法错误呀,在类定义中,不能这样做呀。
    A::A(); //不过只是生成了A类的临时对象

#8


引用 3 楼 max_min_ 的回复:
因为 

class child:public father

所以构造子类的时候必须构造父类,

我的问题是
1、为什么在给派生类实例化的时候,能调用父类的构造函数。子类和父类是两个独立的类。
2、书上说父类的构造函数是没有被子类继承的,那如何子类在实例化的时候,又能调用类外一个类的函数?

#9


书上错了,父类的构造函数只要不是私有的都会继承的。

#10


引用 4 楼 usa_5678 的回复:
Quote: 引用 2 楼 lilin007007 的回复:

    首先我觉得你进入一个误区了,基类作为一个类,他的构造函数本身就可以被其他类调用,不管这个类是不是他的派生类,除非这个构造函数设置成私有的了,或者protected保护的(这种情况下构造函数只能被派生类调用)。

  有问题:
 1、A、B两个类,若 A类在实例化的时候,B类没有实例化,此时A类能调用B类的构造函数吗?
 2、若A类不是B类的友员类,在A的类体中,能直接使用B类的函数吗?
 我想都不可以吧
class A
{
   public:  
   A(){...}
   private:
   int  n ;
}

class B
{
    public: 
    B();
    A::A(); //调用A类的构造函数  这样对吗? 我想除非友员才能这样吧!
    private:
    int m ;
}


举个例子嘛,
class B
{
public:
B():m(0){}//在这儿B已经隐式的调用了A()了
private:
int m;
A a;
}
如个要更明显些,可以这样,
class A
{
   public:  
   A(int v):n(v){}
   private:
   int  n ;
}
class B
{
public:
B():m(0),A(2){}//在这儿B是显示的调用了A(int v)了
private:
int m;
A a;
}

#11


引用 8 楼 usa_5678 的回复:
Quote: 引用 3 楼 max_min_ 的回复:

因为 

class child:public father

所以构造子类的时候必须构造父类,

我的问题是
1、为什么在给派生类实例化的时候,能调用父类的构造函数。子类和父类是两个独立的类。
2、书上说父类的构造函数是没有被子类继承的,那如何子类在实例化的时候,又能调用类外一个类的函数?

我认为2楼说的很对,在对派生类实例化时,需要调用基类的构造函数初始化其基类部分,因为派生类可以访问基类的非private部分,而构造函数是public 的所以可以访问。

#12


引用 11 楼 wsx199397 的回复:
Quote: 引用 8 楼 usa_5678 的回复:

Quote: 引用 3 楼 max_min_ 的回复:

因为 

class child:public father

所以构造子类的时候必须构造父类,

我的问题是
1、为什么在给派生类实例化的时候,能调用父类的构造函数。子类和父类是两个独立的类。
2、书上说父类的构造函数是没有被子类继承的,那如何子类在实例化的时候,又能调用类外一个类的函数?

我认为2楼说的很对,在对派生类实例化时,需要调用基类的构造函数初始化其基类部分,因为派生类可以访问基类的非private部分,而构造函数是public 的所以可以访问。

基类的构造函数式public没有错,,可以访问也没有错,但是类要在实例化的前提下才能使用
类A   对象a
对象a.成员函数()这样才是完成了类中函数的调用,
我的问题一直就是:
基类的构造函数能被调用,那么在派生类实例化的时候基类实例化了吗?

#13


引用 9 楼 lm_whales 的回复:
书上错了,父类的构造函数只要不是私有的都会继承的。

真的吗?哪里看到的,,给个地址我确人下

#14


引用 1 楼 windowpos 的回复:
1.  派生类是会继承基类的参数的,不调用基类构造函数会可能使继承来的参数没有初始化;
2.  实例化派生类时基类会先被实例化;
实际上如果基类使用默认构造函数,派生类会自动调用基类构造函数的


引用 2 楼 lilin007007 的回复:
    首先我觉得你进入一个误区了,基类作为一个类,他的构造函数本身就可以被其他类调用,不管这个类是不是他的派生类,除非这个构造函数设置成私有的了,或者protected保护的(这种情况下构造函数只能被派生类调用)。
关于派生类构造函数调用基类构造函数的问题

#15


引用 12 楼 usa_5678 的回复:
Quote: 引用 11 楼 wsx199397 的回复:

Quote: 引用 8 楼 usa_5678 的回复:

Quote: 引用 3 楼 max_min_ 的回复:

因为 

class child:public father

所以构造子类的时候必须构造父类,

我的问题是
1、为什么在给派生类实例化的时候,能调用父类的构造函数。子类和父类是两个独立的类。
2、书上说父类的构造函数是没有被子类继承的,那如何子类在实例化的时候,又能调用类外一个类的函数?

我认为2楼说的很对,在对派生类实例化时,需要调用基类的构造函数初始化其基类部分,因为派生类可以访问基类的非private部分,而构造函数是public 的所以可以访问。

基类的构造函数式public没有错,,可以访问也没有错,但是类要在实例化的前提下才能使用
类A   对象a
对象a.成员函数()这样才是完成了类中函数的调用,
我的问题一直就是:
基类的构造函数能被调用,那么在派生类实例化的时候基类实例化了吗?

在创建一个派生类对象时,只能说通过基类构造函数是对派生类的基类部分进行初始化。如果你的意思是说在创建派生类对象的同时创建了一个基类对象。。应该没有这种说法吧 关于派生类构造函数调用基类构造函数的问题

#16


派生类的构造是从基类的构造开始 楼主把派生类分为两个部分来看比较好 基类部分由基类构造 派生类部分由派生类构造

#17


引用 12 楼 usa_5678 的回复:
Quote: 引用 11 楼 wsx199397 的回复:

Quote: 引用 8 楼 usa_5678 的回复:

Quote: 引用 3 楼 max_min_ 的回复:

因为 

class child:public father

所以构造子类的时候必须构造父类,

我的问题是
1、为什么在给派生类实例化的时候,能调用父类的构造函数。子类和父类是两个独立的类。
2、书上说父类的构造函数是没有被子类继承的,那如何子类在实例化的时候,又能调用类外一个类的函数?

我认为2楼说的很对,在对派生类实例化时,需要调用基类的构造函数初始化其基类部分,因为派生类可以访问基类的非private部分,而构造函数是public 的所以可以访问。

基类的构造函数式public没有错,,可以访问也没有错,但是类要在实例化的前提下才能使用
类A   对象a
对象a.成员函数()这样才是完成了类中函数的调用,
我的问题一直就是:
基类的构造函数能被调用,那么在派生类实例化的时候基类实例化了吗?

派生类实例化的时候,分为两步,第一步是实例化基类部分,第二步是实例化派生类自己的数据成员,而基类部分的实例化就是调用基类的构造函数来完成的,就像我上面那个例子一样

#18


引用 17 楼 lilin007007 的回复:
Quote: 引用 12 楼 usa_5678 的回复:

Quote: 引用 11 楼 wsx199397 的回复:

Quote: 引用 8 楼 usa_5678 的回复:

Quote: 引用 3 楼 max_min_ 的回复:

因为 

class child:public father

所以构造子类的时候必须构造父类,

我的问题是
1、为什么在给派生类实例化的时候,能调用父类的构造函数。子类和父类是两个独立的类。
2、书上说父类的构造函数是没有被子类继承的,那如何子类在实例化的时候,又能调用类外一个类的函数?

我认为2楼说的很对,在对派生类实例化时,需要调用基类的构造函数初始化其基类部分,因为派生类可以访问基类的非private部分,而构造函数是public 的所以可以访问。

基类的构造函数式public没有错,,可以访问也没有错,但是类要在实例化的前提下才能使用
类A   对象a
对象a.成员函数()这样才是完成了类中函数的调用,
我的问题一直就是:
基类的构造函数能被调用,那么在派生类实例化的时候基类实例化了吗?

派生类实例化的时候,分为两步,第一步是实例化基类部分,第二步是实例化派生类自己的数据成员,而基类部分的实例化就是调用基类的构造函数来完成的,就像我上面那个例子一样

绕来绕去又绕回来了,我就是问子类为什么能够调用基类的构造函数!!!
子类和基类虽然是继承关系,但两者本质上是两种不同的类啊,子类实例化要去调用基类的一个函数,那么首先基类实例化了吗?
要是基类没有实例化,子类又怎么能用去基类体中的函数?

#19


引用 18 楼 usa_5678 的回复:
Quote: 引用 17 楼 lilin007007 的回复:

Quote: 引用 12 楼 usa_5678 的回复:

Quote: 引用 11 楼 wsx199397 的回复:

Quote: 引用 8 楼 usa_5678 的回复:

Quote: 引用 3 楼 max_min_ 的回复:

因为 

class child:public father

所以构造子类的时候必须构造父类,

我的问题是
1、为什么在给派生类实例化的时候,能调用父类的构造函数。子类和父类是两个独立的类。
2、书上说父类的构造函数是没有被子类继承的,那如何子类在实例化的时候,又能调用类外一个类的函数?

我认为2楼说的很对,在对派生类实例化时,需要调用基类的构造函数初始化其基类部分,因为派生类可以访问基类的非private部分,而构造函数是public 的所以可以访问。

基类的构造函数式public没有错,,可以访问也没有错,但是类要在实例化的前提下才能使用
类A   对象a
对象a.成员函数()这样才是完成了类中函数的调用,
我的问题一直就是:
基类的构造函数能被调用,那么在派生类实例化的时候基类实例化了吗?

派生类实例化的时候,分为两步,第一步是实例化基类部分,第二步是实例化派生类自己的数据成员,而基类部分的实例化就是调用基类的构造函数来完成的,就像我上面那个例子一样

绕来绕去又绕回来了,我就是问子类为什么能够调用基类的构造函数!!!
子类和基类虽然是继承关系,但两者本质上是两种不同的类啊,子类实例化要去调用基类的一个函数,那么首先基类实例化了吗?
要是基类没有实例化,子类又怎么能用去基类体中的函数?

反复这这个问题上纠结,构造函数是干嘛的啊,构造函数就是类提供给外部实例化类的对象的接口,如果不能调用类的构造函数,那么怎么实例化类。

#20


引用 19 楼 lilin007007 的回复:
Quote: 引用 18 楼 usa_5678 的回复:

Quote: 引用 17 楼 lilin007007 的回复:

Quote: 引用 12 楼 usa_5678 的回复:

Quote: 引用 11 楼 wsx199397 的回复:

Quote: 引用 8 楼 usa_5678 的回复:

Quote: 引用 3 楼 max_min_ 的回复:

因为 

class child:public father

所以构造子类的时候必须构造父类,

我的问题是
1、为什么在给派生类实例化的时候,能调用父类的构造函数。子类和父类是两个独立的类。
2、书上说父类的构造函数是没有被子类继承的,那如何子类在实例化的时候,又能调用类外一个类的函数?

我认为2楼说的很对,在对派生类实例化时,需要调用基类的构造函数初始化其基类部分,因为派生类可以访问基类的非private部分,而构造函数是public 的所以可以访问。

基类的构造函数式public没有错,,可以访问也没有错,但是类要在实例化的前提下才能使用
类A   对象a
对象a.成员函数()这样才是完成了类中函数的调用,
我的问题一直就是:
基类的构造函数能被调用,那么在派生类实例化的时候基类实例化了吗?

派生类实例化的时候,分为两步,第一步是实例化基类部分,第二步是实例化派生类自己的数据成员,而基类部分的实例化就是调用基类的构造函数来完成的,就像我上面那个例子一样

绕来绕去又绕回来了,我就是问子类为什么能够调用基类的构造函数!!!
子类和基类虽然是继承关系,但两者本质上是两种不同的类啊,子类实例化要去调用基类的一个函数,那么首先基类实例化了吗?
要是基类没有实例化,子类又怎么能用去基类体中的函数?

反复这这个问题上纠结,构造函数是干嘛的啊,构造函数就是类提供给外部实例化类的对象的接口,如果不能调用类的构造函数,那么怎么实例化类。

已经查到了相关了资料,证实派生类实例化时,必须先实例化基类,派生类通过向基类传递其this指针,去初始化派生类中的基类部分数据。~不过貌似楼上并没有看懂我问的什么··but  3Q  All  结帖了

#21


1、为什么在给派生类实例化的时候,能调用父类的构造函数。子类和父类是两个独立的类。
2、书上说父类的构造函数是没有被子类继承的,那如何子类在实例化的时候,又能调用类外一个类的函数?
1)抽象类不能实例化,但是可以在初始化表里,调用抽象类的构造函数,构造子类对象。
因为只要你的代码,是拿来使用而不是玩的;
总有一个最终派生类,不再是抽象类。
这个最终的派生类是可以实例化的。
那么他的父类子对象,也就可以构造了。

2)派生类继承了父类的构造函数,但是调用形式还是父类的形式。
就是说,只能用于构造父类对象,不能构造派生类对象。

除非你把构造函数,定义成私有函数,否则可以继承。
继承的构造函数,只能用于构造父类对象,不能用于构造子类对象。

于是缺省构造函数,只要父类定义了,子类也就可以使用了。
其他构造函数,因为调用方式不同,编译器并不会自动用,同样参数的构造函数,构造子类对象。
所以只有定义了才可以使用。





#22


引用 6 楼 wangdahu888 的回复:
1、若派生类没有继承基类的构造函数,在派生类实例化时为什么能调用另外一个类的构造函数?
    这是语言的规则呀,如果派生类没有显式调用基类的构造函数,那么编译器会生成代码自动调用基类的默认的构造函数。
2、实例化派生类时,基类并没有被实例化,基类当时作为一个数据类型而存在,为什么基类的构造函数能被其他类所调用?
在派生类中,基类的构造函数能被其派生类调用,用来初始化派生类中的基类子对象呀

#23


我有一个想法:
class a                      
{
   public:a(int tx);
........
}
class b:public a
{
  public:
              b(int ta):a(ta){...}
...
}
//--main function-----
我的意思是基类构造函数有参数不是带默认值得,而派生类的构造函数无参数,各位楼主看我的主函数调用对否???
int main()
{
   b xf(3);
 return(0);
}

#24


我所表达的意思是,子类构造函数没有参数,基类构造函数有参数,在建立子对象时,给出了参数,该参数传递给了基类构造函数,对吧。

#1


1.  派生类是会继承基类的参数的,不调用基类构造函数会可能使继承来的参数没有初始化;
2.  实例化派生类时基类会先被实例化;
实际上如果基类使用默认构造函数,派生类会自动调用基类构造函数的

#2


    首先我觉得你进入一个误区了,基类作为一个类,他的构造函数本身就可以被其他类调用,不管这个类是不是他的派生类,除非这个构造函数设置成私有的了,或者protected保护的(这种情况下构造函数只能被派生类调用)。

#3


因为 

class child:public father

所以构造子类的时候必须构造父类,

#4


引用 2 楼 lilin007007 的回复:
    首先我觉得你进入一个误区了,基类作为一个类,他的构造函数本身就可以被其他类调用,不管这个类是不是他的派生类,除非这个构造函数设置成私有的了,或者protected保护的(这种情况下构造函数只能被派生类调用)。

  有问题:
 1、A、B两个类,若 A类在实例化的时候,B类没有实例化,此时A类能调用B类的构造函数吗?
 2、若A类不是B类的友员类,在A的类体中,能直接使用B类的函数吗?
 我想都不可以吧
class A
{
   public:  
   A(){...}
   private:
   int  n ;
}

class B
{
    public: 
    B();
    A::A(); //调用A类的构造函数  这样对吗? 我想除非友员才能这样吧!
    private:
    int m ;
}

#5


A::A(); 没有这样用 的

#6


1、若派生类没有继承基类的构造函数,在派生类实例化时为什么能调用另外一个类的构造函数?
    这是语言的规则呀,如果派生类没有显式调用基类的构造函数,那么编译器会生成代码自动调用基类的默认的构造函数。
2、实例化派生类时,基类并没有被实例化,基类当时作为一个数据类型而存在,为什么基类的构造函数能被其他类所调用?
在派生类中,基类的构造函数能被其派生类调用,用来初始化派生类中的基类子对象呀

#7


引用 4 楼 usa_5678 的回复:
Quote: 引用 2 楼 lilin007007 的回复:

    首先我觉得你进入一个误区了,基类作为一个类,他的构造函数本身就可以被其他类调用,不管这个类是不是他的派生类,除非这个构造函数设置成私有的了,或者protected保护的(这种情况下构造函数只能被派生类调用)。

  有问题:
 1、A、B两个类,若 A类在实例化的时候,B类没有实例化,此时A类能调用B类的构造函数吗?
 2、若A类不是B类的友员类,在A的类体中,能直接使用B类的函数吗?
 我想都不可以吧
class A
{
   public:  
   A(){...}
   private:
   int  n ;
}

class B
{
    public: 
    B();
    A::A(); //调用A类的构造函数  这样对吗? 我想除非友员才能这样吧!
    private:
    int m ;
}


你这是语法错误呀,在类定义中,不能这样做呀。
    A::A(); //不过只是生成了A类的临时对象

#8


引用 3 楼 max_min_ 的回复:
因为 

class child:public father

所以构造子类的时候必须构造父类,

我的问题是
1、为什么在给派生类实例化的时候,能调用父类的构造函数。子类和父类是两个独立的类。
2、书上说父类的构造函数是没有被子类继承的,那如何子类在实例化的时候,又能调用类外一个类的函数?

#9


书上错了,父类的构造函数只要不是私有的都会继承的。

#10


引用 4 楼 usa_5678 的回复:
Quote: 引用 2 楼 lilin007007 的回复:

    首先我觉得你进入一个误区了,基类作为一个类,他的构造函数本身就可以被其他类调用,不管这个类是不是他的派生类,除非这个构造函数设置成私有的了,或者protected保护的(这种情况下构造函数只能被派生类调用)。

  有问题:
 1、A、B两个类,若 A类在实例化的时候,B类没有实例化,此时A类能调用B类的构造函数吗?
 2、若A类不是B类的友员类,在A的类体中,能直接使用B类的函数吗?
 我想都不可以吧
class A
{
   public:  
   A(){...}
   private:
   int  n ;
}

class B
{
    public: 
    B();
    A::A(); //调用A类的构造函数  这样对吗? 我想除非友员才能这样吧!
    private:
    int m ;
}


举个例子嘛,
class B
{
public:
B():m(0){}//在这儿B已经隐式的调用了A()了
private:
int m;
A a;
}
如个要更明显些,可以这样,
class A
{
   public:  
   A(int v):n(v){}
   private:
   int  n ;
}
class B
{
public:
B():m(0),A(2){}//在这儿B是显示的调用了A(int v)了
private:
int m;
A a;
}

#11


引用 8 楼 usa_5678 的回复:
Quote: 引用 3 楼 max_min_ 的回复:

因为 

class child:public father

所以构造子类的时候必须构造父类,

我的问题是
1、为什么在给派生类实例化的时候,能调用父类的构造函数。子类和父类是两个独立的类。
2、书上说父类的构造函数是没有被子类继承的,那如何子类在实例化的时候,又能调用类外一个类的函数?

我认为2楼说的很对,在对派生类实例化时,需要调用基类的构造函数初始化其基类部分,因为派生类可以访问基类的非private部分,而构造函数是public 的所以可以访问。

#12


引用 11 楼 wsx199397 的回复:
Quote: 引用 8 楼 usa_5678 的回复:

Quote: 引用 3 楼 max_min_ 的回复:

因为 

class child:public father

所以构造子类的时候必须构造父类,

我的问题是
1、为什么在给派生类实例化的时候,能调用父类的构造函数。子类和父类是两个独立的类。
2、书上说父类的构造函数是没有被子类继承的,那如何子类在实例化的时候,又能调用类外一个类的函数?

我认为2楼说的很对,在对派生类实例化时,需要调用基类的构造函数初始化其基类部分,因为派生类可以访问基类的非private部分,而构造函数是public 的所以可以访问。

基类的构造函数式public没有错,,可以访问也没有错,但是类要在实例化的前提下才能使用
类A   对象a
对象a.成员函数()这样才是完成了类中函数的调用,
我的问题一直就是:
基类的构造函数能被调用,那么在派生类实例化的时候基类实例化了吗?

#13


引用 9 楼 lm_whales 的回复:
书上错了,父类的构造函数只要不是私有的都会继承的。

真的吗?哪里看到的,,给个地址我确人下

#14


引用 1 楼 windowpos 的回复:
1.  派生类是会继承基类的参数的,不调用基类构造函数会可能使继承来的参数没有初始化;
2.  实例化派生类时基类会先被实例化;
实际上如果基类使用默认构造函数,派生类会自动调用基类构造函数的


引用 2 楼 lilin007007 的回复:
    首先我觉得你进入一个误区了,基类作为一个类,他的构造函数本身就可以被其他类调用,不管这个类是不是他的派生类,除非这个构造函数设置成私有的了,或者protected保护的(这种情况下构造函数只能被派生类调用)。
关于派生类构造函数调用基类构造函数的问题

#15


引用 12 楼 usa_5678 的回复:
Quote: 引用 11 楼 wsx199397 的回复:

Quote: 引用 8 楼 usa_5678 的回复:

Quote: 引用 3 楼 max_min_ 的回复:

因为 

class child:public father

所以构造子类的时候必须构造父类,

我的问题是
1、为什么在给派生类实例化的时候,能调用父类的构造函数。子类和父类是两个独立的类。
2、书上说父类的构造函数是没有被子类继承的,那如何子类在实例化的时候,又能调用类外一个类的函数?

我认为2楼说的很对,在对派生类实例化时,需要调用基类的构造函数初始化其基类部分,因为派生类可以访问基类的非private部分,而构造函数是public 的所以可以访问。

基类的构造函数式public没有错,,可以访问也没有错,但是类要在实例化的前提下才能使用
类A   对象a
对象a.成员函数()这样才是完成了类中函数的调用,
我的问题一直就是:
基类的构造函数能被调用,那么在派生类实例化的时候基类实例化了吗?

在创建一个派生类对象时,只能说通过基类构造函数是对派生类的基类部分进行初始化。如果你的意思是说在创建派生类对象的同时创建了一个基类对象。。应该没有这种说法吧 关于派生类构造函数调用基类构造函数的问题

#16


派生类的构造是从基类的构造开始 楼主把派生类分为两个部分来看比较好 基类部分由基类构造 派生类部分由派生类构造

#17


引用 12 楼 usa_5678 的回复:
Quote: 引用 11 楼 wsx199397 的回复:

Quote: 引用 8 楼 usa_5678 的回复:

Quote: 引用 3 楼 max_min_ 的回复:

因为 

class child:public father

所以构造子类的时候必须构造父类,

我的问题是
1、为什么在给派生类实例化的时候,能调用父类的构造函数。子类和父类是两个独立的类。
2、书上说父类的构造函数是没有被子类继承的,那如何子类在实例化的时候,又能调用类外一个类的函数?

我认为2楼说的很对,在对派生类实例化时,需要调用基类的构造函数初始化其基类部分,因为派生类可以访问基类的非private部分,而构造函数是public 的所以可以访问。

基类的构造函数式public没有错,,可以访问也没有错,但是类要在实例化的前提下才能使用
类A   对象a
对象a.成员函数()这样才是完成了类中函数的调用,
我的问题一直就是:
基类的构造函数能被调用,那么在派生类实例化的时候基类实例化了吗?

派生类实例化的时候,分为两步,第一步是实例化基类部分,第二步是实例化派生类自己的数据成员,而基类部分的实例化就是调用基类的构造函数来完成的,就像我上面那个例子一样

#18


引用 17 楼 lilin007007 的回复:
Quote: 引用 12 楼 usa_5678 的回复:

Quote: 引用 11 楼 wsx199397 的回复:

Quote: 引用 8 楼 usa_5678 的回复:

Quote: 引用 3 楼 max_min_ 的回复:

因为 

class child:public father

所以构造子类的时候必须构造父类,

我的问题是
1、为什么在给派生类实例化的时候,能调用父类的构造函数。子类和父类是两个独立的类。
2、书上说父类的构造函数是没有被子类继承的,那如何子类在实例化的时候,又能调用类外一个类的函数?

我认为2楼说的很对,在对派生类实例化时,需要调用基类的构造函数初始化其基类部分,因为派生类可以访问基类的非private部分,而构造函数是public 的所以可以访问。

基类的构造函数式public没有错,,可以访问也没有错,但是类要在实例化的前提下才能使用
类A   对象a
对象a.成员函数()这样才是完成了类中函数的调用,
我的问题一直就是:
基类的构造函数能被调用,那么在派生类实例化的时候基类实例化了吗?

派生类实例化的时候,分为两步,第一步是实例化基类部分,第二步是实例化派生类自己的数据成员,而基类部分的实例化就是调用基类的构造函数来完成的,就像我上面那个例子一样

绕来绕去又绕回来了,我就是问子类为什么能够调用基类的构造函数!!!
子类和基类虽然是继承关系,但两者本质上是两种不同的类啊,子类实例化要去调用基类的一个函数,那么首先基类实例化了吗?
要是基类没有实例化,子类又怎么能用去基类体中的函数?

#19


引用 18 楼 usa_5678 的回复:
Quote: 引用 17 楼 lilin007007 的回复:

Quote: 引用 12 楼 usa_5678 的回复:

Quote: 引用 11 楼 wsx199397 的回复:

Quote: 引用 8 楼 usa_5678 的回复:

Quote: 引用 3 楼 max_min_ 的回复:

因为 

class child:public father

所以构造子类的时候必须构造父类,

我的问题是
1、为什么在给派生类实例化的时候,能调用父类的构造函数。子类和父类是两个独立的类。
2、书上说父类的构造函数是没有被子类继承的,那如何子类在实例化的时候,又能调用类外一个类的函数?

我认为2楼说的很对,在对派生类实例化时,需要调用基类的构造函数初始化其基类部分,因为派生类可以访问基类的非private部分,而构造函数是public 的所以可以访问。

基类的构造函数式public没有错,,可以访问也没有错,但是类要在实例化的前提下才能使用
类A   对象a
对象a.成员函数()这样才是完成了类中函数的调用,
我的问题一直就是:
基类的构造函数能被调用,那么在派生类实例化的时候基类实例化了吗?

派生类实例化的时候,分为两步,第一步是实例化基类部分,第二步是实例化派生类自己的数据成员,而基类部分的实例化就是调用基类的构造函数来完成的,就像我上面那个例子一样

绕来绕去又绕回来了,我就是问子类为什么能够调用基类的构造函数!!!
子类和基类虽然是继承关系,但两者本质上是两种不同的类啊,子类实例化要去调用基类的一个函数,那么首先基类实例化了吗?
要是基类没有实例化,子类又怎么能用去基类体中的函数?

反复这这个问题上纠结,构造函数是干嘛的啊,构造函数就是类提供给外部实例化类的对象的接口,如果不能调用类的构造函数,那么怎么实例化类。

#20


引用 19 楼 lilin007007 的回复:
Quote: 引用 18 楼 usa_5678 的回复:

Quote: 引用 17 楼 lilin007007 的回复:

Quote: 引用 12 楼 usa_5678 的回复:

Quote: 引用 11 楼 wsx199397 的回复:

Quote: 引用 8 楼 usa_5678 的回复:

Quote: 引用 3 楼 max_min_ 的回复:

因为 

class child:public father

所以构造子类的时候必须构造父类,

我的问题是
1、为什么在给派生类实例化的时候,能调用父类的构造函数。子类和父类是两个独立的类。
2、书上说父类的构造函数是没有被子类继承的,那如何子类在实例化的时候,又能调用类外一个类的函数?

我认为2楼说的很对,在对派生类实例化时,需要调用基类的构造函数初始化其基类部分,因为派生类可以访问基类的非private部分,而构造函数是public 的所以可以访问。

基类的构造函数式public没有错,,可以访问也没有错,但是类要在实例化的前提下才能使用
类A   对象a
对象a.成员函数()这样才是完成了类中函数的调用,
我的问题一直就是:
基类的构造函数能被调用,那么在派生类实例化的时候基类实例化了吗?

派生类实例化的时候,分为两步,第一步是实例化基类部分,第二步是实例化派生类自己的数据成员,而基类部分的实例化就是调用基类的构造函数来完成的,就像我上面那个例子一样

绕来绕去又绕回来了,我就是问子类为什么能够调用基类的构造函数!!!
子类和基类虽然是继承关系,但两者本质上是两种不同的类啊,子类实例化要去调用基类的一个函数,那么首先基类实例化了吗?
要是基类没有实例化,子类又怎么能用去基类体中的函数?

反复这这个问题上纠结,构造函数是干嘛的啊,构造函数就是类提供给外部实例化类的对象的接口,如果不能调用类的构造函数,那么怎么实例化类。

已经查到了相关了资料,证实派生类实例化时,必须先实例化基类,派生类通过向基类传递其this指针,去初始化派生类中的基类部分数据。~不过貌似楼上并没有看懂我问的什么··but  3Q  All  结帖了

#21


1、为什么在给派生类实例化的时候,能调用父类的构造函数。子类和父类是两个独立的类。
2、书上说父类的构造函数是没有被子类继承的,那如何子类在实例化的时候,又能调用类外一个类的函数?
1)抽象类不能实例化,但是可以在初始化表里,调用抽象类的构造函数,构造子类对象。
因为只要你的代码,是拿来使用而不是玩的;
总有一个最终派生类,不再是抽象类。
这个最终的派生类是可以实例化的。
那么他的父类子对象,也就可以构造了。

2)派生类继承了父类的构造函数,但是调用形式还是父类的形式。
就是说,只能用于构造父类对象,不能构造派生类对象。

除非你把构造函数,定义成私有函数,否则可以继承。
继承的构造函数,只能用于构造父类对象,不能用于构造子类对象。

于是缺省构造函数,只要父类定义了,子类也就可以使用了。
其他构造函数,因为调用方式不同,编译器并不会自动用,同样参数的构造函数,构造子类对象。
所以只有定义了才可以使用。





#22


引用 6 楼 wangdahu888 的回复:
1、若派生类没有继承基类的构造函数,在派生类实例化时为什么能调用另外一个类的构造函数?
    这是语言的规则呀,如果派生类没有显式调用基类的构造函数,那么编译器会生成代码自动调用基类的默认的构造函数。
2、实例化派生类时,基类并没有被实例化,基类当时作为一个数据类型而存在,为什么基类的构造函数能被其他类所调用?
在派生类中,基类的构造函数能被其派生类调用,用来初始化派生类中的基类子对象呀

#23


我有一个想法:
class a                      
{
   public:a(int tx);
........
}
class b:public a
{
  public:
              b(int ta):a(ta){...}
...
}
//--main function-----
我的意思是基类构造函数有参数不是带默认值得,而派生类的构造函数无参数,各位楼主看我的主函数调用对否???
int main()
{
   b xf(3);
 return(0);
}

#24


我所表达的意思是,子类构造函数没有参数,基类构造函数有参数,在建立子对象时,给出了参数,该参数传递给了基类构造函数,对吧。