1、派生类不能继承基类的构造函数!
2、实例化一个派生类的对象时, 先调用基类的构造函数去实例化从基类继承来的成员。
派生类和基类虽然有继承关系,但本质上是两个独立的类
我的问题是:
1、若派生类没有继承基类的构造函数,在派生类实例化时为什么能调用另外一个类的构造函数?
2、实例化派生类时,基类并没有被实例化,基类当时作为一个数据类型而存在,为什么基类的构造函数能被其他类所调用?
24 个解决方案
#1
1. 派生类是会继承基类的参数的,不调用基类构造函数会可能使继承来的参数没有初始化;
2. 实例化派生类时基类会先被实例化;
实际上如果基类使用默认构造函数,派生类会自动调用基类构造函数的
2. 实例化派生类时基类会先被实例化;
实际上如果基类使用默认构造函数,派生类会自动调用基类构造函数的
#2
首先我觉得你进入一个误区了,基类作为一个类,他的构造函数本身就可以被其他类调用,不管这个类是不是他的派生类,除非这个构造函数设置成私有的了,或者protected保护的(这种情况下构造函数只能被派生类调用)。
#3
因为
所以构造子类的时候必须构造父类,
class child:public father
所以构造子类的时候必须构造父类,
#4
有问题:
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、实例化派生类时,基类并没有被实例化,基类当时作为一个数据类型而存在,为什么基类的构造函数能被其他类所调用?
在派生类中,基类的构造函数能被其派生类调用,用来初始化派生类中的基类子对象呀
这是语言的规则呀,如果派生类没有显式调用基类的构造函数,那么编译器会生成代码自动调用基类的默认的构造函数。
2、实例化派生类时,基类并没有被实例化,基类当时作为一个数据类型而存在,为什么基类的构造函数能被其他类所调用?
在派生类中,基类的构造函数能被其派生类调用,用来初始化派生类中的基类子对象呀
#7
你这是语法错误呀,在类定义中,不能这样做呀。
A::A(); //不过只是生成了A类的临时对象
#8
因为
class child:public father
所以构造子类的时候必须构造父类,
我的问题是
1、为什么在给派生类实例化的时候,能调用父类的构造函数。子类和父类是两个独立的类。
2、书上说父类的构造函数是没有被子类继承的,那如何子类在实例化的时候,又能调用类外一个类的函数?
#9
书上错了,父类的构造函数只要不是私有的都会继承的。
#10
首先我觉得你进入一个误区了,基类作为一个类,他的构造函数本身就可以被其他类调用,不管这个类是不是他的派生类,除非这个构造函数设置成私有的了,或者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
因为
class child:public father
所以构造子类的时候必须构造父类,
我的问题是
1、为什么在给派生类实例化的时候,能调用父类的构造函数。子类和父类是两个独立的类。
2、书上说父类的构造函数是没有被子类继承的,那如何子类在实例化的时候,又能调用类外一个类的函数?
我认为2楼说的很对,在对派生类实例化时,需要调用基类的构造函数初始化其基类部分,因为派生类可以访问基类的非private部分,而构造函数是public 的所以可以访问。
#12
因为
class child:public father
所以构造子类的时候必须构造父类,
我的问题是
1、为什么在给派生类实例化的时候,能调用父类的构造函数。子类和父类是两个独立的类。
2、书上说父类的构造函数是没有被子类继承的,那如何子类在实例化的时候,又能调用类外一个类的函数?
我认为2楼说的很对,在对派生类实例化时,需要调用基类的构造函数初始化其基类部分,因为派生类可以访问基类的非private部分,而构造函数是public 的所以可以访问。
基类的构造函数式public没有错,,可以访问也没有错,但是类要在实例化的前提下才能使用
类A 对象a
对象a.成员函数()这样才是完成了类中函数的调用,
我的问题一直就是:
基类的构造函数能被调用,那么在派生类实例化的时候基类实例化了吗?
#13
书上错了,父类的构造函数只要不是私有的都会继承的。
真的吗?哪里看到的,,给个地址我确人下
#14
1. 派生类是会继承基类的参数的,不调用基类构造函数会可能使继承来的参数没有初始化;
2. 实例化派生类时基类会先被实例化;
实际上如果基类使用默认构造函数,派生类会自动调用基类构造函数的
首先我觉得你进入一个误区了,基类作为一个类,他的构造函数本身就可以被其他类调用,不管这个类是不是他的派生类,除非这个构造函数设置成私有的了,或者protected保护的(这种情况下构造函数只能被派生类调用)。
#15
因为
class child:public father
所以构造子类的时候必须构造父类,
我的问题是
1、为什么在给派生类实例化的时候,能调用父类的构造函数。子类和父类是两个独立的类。
2、书上说父类的构造函数是没有被子类继承的,那如何子类在实例化的时候,又能调用类外一个类的函数?
我认为2楼说的很对,在对派生类实例化时,需要调用基类的构造函数初始化其基类部分,因为派生类可以访问基类的非private部分,而构造函数是public 的所以可以访问。
基类的构造函数式public没有错,,可以访问也没有错,但是类要在实例化的前提下才能使用
类A 对象a
对象a.成员函数()这样才是完成了类中函数的调用,
我的问题一直就是:
基类的构造函数能被调用,那么在派生类实例化的时候基类实例化了吗?
在创建一个派生类对象时,只能说通过基类构造函数是对派生类的基类部分进行初始化。如果你的意思是说在创建派生类对象的同时创建了一个基类对象。。应该没有这种说法吧
#16
派生类的构造是从基类的构造开始 楼主把派生类分为两个部分来看比较好 基类部分由基类构造 派生类部分由派生类构造
#17
因为
class child:public father
所以构造子类的时候必须构造父类,
我的问题是
1、为什么在给派生类实例化的时候,能调用父类的构造函数。子类和父类是两个独立的类。
2、书上说父类的构造函数是没有被子类继承的,那如何子类在实例化的时候,又能调用类外一个类的函数?
我认为2楼说的很对,在对派生类实例化时,需要调用基类的构造函数初始化其基类部分,因为派生类可以访问基类的非private部分,而构造函数是public 的所以可以访问。
基类的构造函数式public没有错,,可以访问也没有错,但是类要在实例化的前提下才能使用
类A 对象a
对象a.成员函数()这样才是完成了类中函数的调用,
我的问题一直就是:
基类的构造函数能被调用,那么在派生类实例化的时候基类实例化了吗?
派生类实例化的时候,分为两步,第一步是实例化基类部分,第二步是实例化派生类自己的数据成员,而基类部分的实例化就是调用基类的构造函数来完成的,就像我上面那个例子一样
#18
因为
class child:public father
所以构造子类的时候必须构造父类,
我的问题是
1、为什么在给派生类实例化的时候,能调用父类的构造函数。子类和父类是两个独立的类。
2、书上说父类的构造函数是没有被子类继承的,那如何子类在实例化的时候,又能调用类外一个类的函数?
我认为2楼说的很对,在对派生类实例化时,需要调用基类的构造函数初始化其基类部分,因为派生类可以访问基类的非private部分,而构造函数是public 的所以可以访问。
基类的构造函数式public没有错,,可以访问也没有错,但是类要在实例化的前提下才能使用
类A 对象a
对象a.成员函数()这样才是完成了类中函数的调用,
我的问题一直就是:
基类的构造函数能被调用,那么在派生类实例化的时候基类实例化了吗?
派生类实例化的时候,分为两步,第一步是实例化基类部分,第二步是实例化派生类自己的数据成员,而基类部分的实例化就是调用基类的构造函数来完成的,就像我上面那个例子一样
绕来绕去又绕回来了,我就是问子类为什么能够调用基类的构造函数!!!
子类和基类虽然是继承关系,但两者本质上是两种不同的类啊,子类实例化要去调用基类的一个函数,那么首先基类实例化了吗?
要是基类没有实例化,子类又怎么能用去基类体中的函数?
#19
因为
class child:public father
所以构造子类的时候必须构造父类,
我的问题是
1、为什么在给派生类实例化的时候,能调用父类的构造函数。子类和父类是两个独立的类。
2、书上说父类的构造函数是没有被子类继承的,那如何子类在实例化的时候,又能调用类外一个类的函数?
我认为2楼说的很对,在对派生类实例化时,需要调用基类的构造函数初始化其基类部分,因为派生类可以访问基类的非private部分,而构造函数是public 的所以可以访问。
基类的构造函数式public没有错,,可以访问也没有错,但是类要在实例化的前提下才能使用
类A 对象a
对象a.成员函数()这样才是完成了类中函数的调用,
我的问题一直就是:
基类的构造函数能被调用,那么在派生类实例化的时候基类实例化了吗?
派生类实例化的时候,分为两步,第一步是实例化基类部分,第二步是实例化派生类自己的数据成员,而基类部分的实例化就是调用基类的构造函数来完成的,就像我上面那个例子一样
绕来绕去又绕回来了,我就是问子类为什么能够调用基类的构造函数!!!
子类和基类虽然是继承关系,但两者本质上是两种不同的类啊,子类实例化要去调用基类的一个函数,那么首先基类实例化了吗?
要是基类没有实例化,子类又怎么能用去基类体中的函数?
反复这这个问题上纠结,构造函数是干嘛的啊,构造函数就是类提供给外部实例化类的对象的接口,如果不能调用类的构造函数,那么怎么实例化类。
#20
因为
class child:public father
所以构造子类的时候必须构造父类,
我的问题是
1、为什么在给派生类实例化的时候,能调用父类的构造函数。子类和父类是两个独立的类。
2、书上说父类的构造函数是没有被子类继承的,那如何子类在实例化的时候,又能调用类外一个类的函数?
我认为2楼说的很对,在对派生类实例化时,需要调用基类的构造函数初始化其基类部分,因为派生类可以访问基类的非private部分,而构造函数是public 的所以可以访问。
基类的构造函数式public没有错,,可以访问也没有错,但是类要在实例化的前提下才能使用
类A 对象a
对象a.成员函数()这样才是完成了类中函数的调用,
我的问题一直就是:
基类的构造函数能被调用,那么在派生类实例化的时候基类实例化了吗?
派生类实例化的时候,分为两步,第一步是实例化基类部分,第二步是实例化派生类自己的数据成员,而基类部分的实例化就是调用基类的构造函数来完成的,就像我上面那个例子一样
绕来绕去又绕回来了,我就是问子类为什么能够调用基类的构造函数!!!
子类和基类虽然是继承关系,但两者本质上是两种不同的类啊,子类实例化要去调用基类的一个函数,那么首先基类实例化了吗?
要是基类没有实例化,子类又怎么能用去基类体中的函数?
反复这这个问题上纠结,构造函数是干嘛的啊,构造函数就是类提供给外部实例化类的对象的接口,如果不能调用类的构造函数,那么怎么实例化类。
已经查到了相关了资料,证实派生类实例化时,必须先实例化基类,派生类通过向基类传递其this指针,去初始化派生类中的基类部分数据。~不过貌似楼上并没有看懂我问的什么··but 3Q All 结帖了
#21
1、为什么在给派生类实例化的时候,能调用父类的构造函数。子类和父类是两个独立的类。
2、书上说父类的构造函数是没有被子类继承的,那如何子类在实例化的时候,又能调用类外一个类的函数?
1)抽象类不能实例化,但是可以在初始化表里,调用抽象类的构造函数,构造子类对象。
因为只要你的代码,是拿来使用而不是玩的;
总有一个最终派生类,不再是抽象类。
这个最终的派生类是可以实例化的。
那么他的父类子对象,也就可以构造了。
2)派生类继承了父类的构造函数,但是调用形式还是父类的形式。
就是说,只能用于构造父类对象,不能构造派生类对象。
除非你把构造函数,定义成私有函数,否则可以继承。
继承的构造函数,只能用于构造父类对象,不能用于构造子类对象。
于是缺省构造函数,只要父类定义了,子类也就可以使用了。
其他构造函数,因为调用方式不同,编译器并不会自动用,同样参数的构造函数,构造子类对象。
所以只有定义了才可以使用。
2、书上说父类的构造函数是没有被子类继承的,那如何子类在实例化的时候,又能调用类外一个类的函数?
1)抽象类不能实例化,但是可以在初始化表里,调用抽象类的构造函数,构造子类对象。
因为只要你的代码,是拿来使用而不是玩的;
总有一个最终派生类,不再是抽象类。
这个最终的派生类是可以实例化的。
那么他的父类子对象,也就可以构造了。
2)派生类继承了父类的构造函数,但是调用形式还是父类的形式。
就是说,只能用于构造父类对象,不能构造派生类对象。
除非你把构造函数,定义成私有函数,否则可以继承。
继承的构造函数,只能用于构造父类对象,不能用于构造子类对象。
于是缺省构造函数,只要父类定义了,子类也就可以使用了。
其他构造函数,因为调用方式不同,编译器并不会自动用,同样参数的构造函数,构造子类对象。
所以只有定义了才可以使用。
#22
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);
}
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. 实例化派生类时基类会先被实例化;
实际上如果基类使用默认构造函数,派生类会自动调用基类构造函数的
#2
首先我觉得你进入一个误区了,基类作为一个类,他的构造函数本身就可以被其他类调用,不管这个类是不是他的派生类,除非这个构造函数设置成私有的了,或者protected保护的(这种情况下构造函数只能被派生类调用)。
#3
因为
所以构造子类的时候必须构造父类,
class child:public father
所以构造子类的时候必须构造父类,
#4
首先我觉得你进入一个误区了,基类作为一个类,他的构造函数本身就可以被其他类调用,不管这个类是不是他的派生类,除非这个构造函数设置成私有的了,或者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、实例化派生类时,基类并没有被实例化,基类当时作为一个数据类型而存在,为什么基类的构造函数能被其他类所调用?
在派生类中,基类的构造函数能被其派生类调用,用来初始化派生类中的基类子对象呀
这是语言的规则呀,如果派生类没有显式调用基类的构造函数,那么编译器会生成代码自动调用基类的默认的构造函数。
2、实例化派生类时,基类并没有被实例化,基类当时作为一个数据类型而存在,为什么基类的构造函数能被其他类所调用?
在派生类中,基类的构造函数能被其派生类调用,用来初始化派生类中的基类子对象呀
#7
首先我觉得你进入一个误区了,基类作为一个类,他的构造函数本身就可以被其他类调用,不管这个类是不是他的派生类,除非这个构造函数设置成私有的了,或者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
因为
class child:public father
所以构造子类的时候必须构造父类,
我的问题是
1、为什么在给派生类实例化的时候,能调用父类的构造函数。子类和父类是两个独立的类。
2、书上说父类的构造函数是没有被子类继承的,那如何子类在实例化的时候,又能调用类外一个类的函数?
#9
书上错了,父类的构造函数只要不是私有的都会继承的。
#10
首先我觉得你进入一个误区了,基类作为一个类,他的构造函数本身就可以被其他类调用,不管这个类是不是他的派生类,除非这个构造函数设置成私有的了,或者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
因为
class child:public father
所以构造子类的时候必须构造父类,
我的问题是
1、为什么在给派生类实例化的时候,能调用父类的构造函数。子类和父类是两个独立的类。
2、书上说父类的构造函数是没有被子类继承的,那如何子类在实例化的时候,又能调用类外一个类的函数?
我认为2楼说的很对,在对派生类实例化时,需要调用基类的构造函数初始化其基类部分,因为派生类可以访问基类的非private部分,而构造函数是public 的所以可以访问。
#12
因为
class child:public father
所以构造子类的时候必须构造父类,
我的问题是
1、为什么在给派生类实例化的时候,能调用父类的构造函数。子类和父类是两个独立的类。
2、书上说父类的构造函数是没有被子类继承的,那如何子类在实例化的时候,又能调用类外一个类的函数?
我认为2楼说的很对,在对派生类实例化时,需要调用基类的构造函数初始化其基类部分,因为派生类可以访问基类的非private部分,而构造函数是public 的所以可以访问。
基类的构造函数式public没有错,,可以访问也没有错,但是类要在实例化的前提下才能使用
类A 对象a
对象a.成员函数()这样才是完成了类中函数的调用,
我的问题一直就是:
基类的构造函数能被调用,那么在派生类实例化的时候基类实例化了吗?
#13
书上错了,父类的构造函数只要不是私有的都会继承的。
真的吗?哪里看到的,,给个地址我确人下
#14
1. 派生类是会继承基类的参数的,不调用基类构造函数会可能使继承来的参数没有初始化;
2. 实例化派生类时基类会先被实例化;
实际上如果基类使用默认构造函数,派生类会自动调用基类构造函数的
首先我觉得你进入一个误区了,基类作为一个类,他的构造函数本身就可以被其他类调用,不管这个类是不是他的派生类,除非这个构造函数设置成私有的了,或者protected保护的(这种情况下构造函数只能被派生类调用)。
#15
因为
class child:public father
所以构造子类的时候必须构造父类,
我的问题是
1、为什么在给派生类实例化的时候,能调用父类的构造函数。子类和父类是两个独立的类。
2、书上说父类的构造函数是没有被子类继承的,那如何子类在实例化的时候,又能调用类外一个类的函数?
我认为2楼说的很对,在对派生类实例化时,需要调用基类的构造函数初始化其基类部分,因为派生类可以访问基类的非private部分,而构造函数是public 的所以可以访问。
基类的构造函数式public没有错,,可以访问也没有错,但是类要在实例化的前提下才能使用
类A 对象a
对象a.成员函数()这样才是完成了类中函数的调用,
我的问题一直就是:
基类的构造函数能被调用,那么在派生类实例化的时候基类实例化了吗?
在创建一个派生类对象时,只能说通过基类构造函数是对派生类的基类部分进行初始化。如果你的意思是说在创建派生类对象的同时创建了一个基类对象。。应该没有这种说法吧
#16
派生类的构造是从基类的构造开始 楼主把派生类分为两个部分来看比较好 基类部分由基类构造 派生类部分由派生类构造
#17
因为
class child:public father
所以构造子类的时候必须构造父类,
我的问题是
1、为什么在给派生类实例化的时候,能调用父类的构造函数。子类和父类是两个独立的类。
2、书上说父类的构造函数是没有被子类继承的,那如何子类在实例化的时候,又能调用类外一个类的函数?
我认为2楼说的很对,在对派生类实例化时,需要调用基类的构造函数初始化其基类部分,因为派生类可以访问基类的非private部分,而构造函数是public 的所以可以访问。
基类的构造函数式public没有错,,可以访问也没有错,但是类要在实例化的前提下才能使用
类A 对象a
对象a.成员函数()这样才是完成了类中函数的调用,
我的问题一直就是:
基类的构造函数能被调用,那么在派生类实例化的时候基类实例化了吗?
派生类实例化的时候,分为两步,第一步是实例化基类部分,第二步是实例化派生类自己的数据成员,而基类部分的实例化就是调用基类的构造函数来完成的,就像我上面那个例子一样
#18
因为
class child:public father
所以构造子类的时候必须构造父类,
我的问题是
1、为什么在给派生类实例化的时候,能调用父类的构造函数。子类和父类是两个独立的类。
2、书上说父类的构造函数是没有被子类继承的,那如何子类在实例化的时候,又能调用类外一个类的函数?
我认为2楼说的很对,在对派生类实例化时,需要调用基类的构造函数初始化其基类部分,因为派生类可以访问基类的非private部分,而构造函数是public 的所以可以访问。
基类的构造函数式public没有错,,可以访问也没有错,但是类要在实例化的前提下才能使用
类A 对象a
对象a.成员函数()这样才是完成了类中函数的调用,
我的问题一直就是:
基类的构造函数能被调用,那么在派生类实例化的时候基类实例化了吗?
派生类实例化的时候,分为两步,第一步是实例化基类部分,第二步是实例化派生类自己的数据成员,而基类部分的实例化就是调用基类的构造函数来完成的,就像我上面那个例子一样
绕来绕去又绕回来了,我就是问子类为什么能够调用基类的构造函数!!!
子类和基类虽然是继承关系,但两者本质上是两种不同的类啊,子类实例化要去调用基类的一个函数,那么首先基类实例化了吗?
要是基类没有实例化,子类又怎么能用去基类体中的函数?
#19
因为
class child:public father
所以构造子类的时候必须构造父类,
我的问题是
1、为什么在给派生类实例化的时候,能调用父类的构造函数。子类和父类是两个独立的类。
2、书上说父类的构造函数是没有被子类继承的,那如何子类在实例化的时候,又能调用类外一个类的函数?
我认为2楼说的很对,在对派生类实例化时,需要调用基类的构造函数初始化其基类部分,因为派生类可以访问基类的非private部分,而构造函数是public 的所以可以访问。
基类的构造函数式public没有错,,可以访问也没有错,但是类要在实例化的前提下才能使用
类A 对象a
对象a.成员函数()这样才是完成了类中函数的调用,
我的问题一直就是:
基类的构造函数能被调用,那么在派生类实例化的时候基类实例化了吗?
派生类实例化的时候,分为两步,第一步是实例化基类部分,第二步是实例化派生类自己的数据成员,而基类部分的实例化就是调用基类的构造函数来完成的,就像我上面那个例子一样
绕来绕去又绕回来了,我就是问子类为什么能够调用基类的构造函数!!!
子类和基类虽然是继承关系,但两者本质上是两种不同的类啊,子类实例化要去调用基类的一个函数,那么首先基类实例化了吗?
要是基类没有实例化,子类又怎么能用去基类体中的函数?
反复这这个问题上纠结,构造函数是干嘛的啊,构造函数就是类提供给外部实例化类的对象的接口,如果不能调用类的构造函数,那么怎么实例化类。
#20
因为
class child:public father
所以构造子类的时候必须构造父类,
我的问题是
1、为什么在给派生类实例化的时候,能调用父类的构造函数。子类和父类是两个独立的类。
2、书上说父类的构造函数是没有被子类继承的,那如何子类在实例化的时候,又能调用类外一个类的函数?
我认为2楼说的很对,在对派生类实例化时,需要调用基类的构造函数初始化其基类部分,因为派生类可以访问基类的非private部分,而构造函数是public 的所以可以访问。
基类的构造函数式public没有错,,可以访问也没有错,但是类要在实例化的前提下才能使用
类A 对象a
对象a.成员函数()这样才是完成了类中函数的调用,
我的问题一直就是:
基类的构造函数能被调用,那么在派生类实例化的时候基类实例化了吗?
派生类实例化的时候,分为两步,第一步是实例化基类部分,第二步是实例化派生类自己的数据成员,而基类部分的实例化就是调用基类的构造函数来完成的,就像我上面那个例子一样
绕来绕去又绕回来了,我就是问子类为什么能够调用基类的构造函数!!!
子类和基类虽然是继承关系,但两者本质上是两种不同的类啊,子类实例化要去调用基类的一个函数,那么首先基类实例化了吗?
要是基类没有实例化,子类又怎么能用去基类体中的函数?
反复这这个问题上纠结,构造函数是干嘛的啊,构造函数就是类提供给外部实例化类的对象的接口,如果不能调用类的构造函数,那么怎么实例化类。
已经查到了相关了资料,证实派生类实例化时,必须先实例化基类,派生类通过向基类传递其this指针,去初始化派生类中的基类部分数据。~不过貌似楼上并没有看懂我问的什么··but 3Q All 结帖了
#21
1、为什么在给派生类实例化的时候,能调用父类的构造函数。子类和父类是两个独立的类。
2、书上说父类的构造函数是没有被子类继承的,那如何子类在实例化的时候,又能调用类外一个类的函数?
1)抽象类不能实例化,但是可以在初始化表里,调用抽象类的构造函数,构造子类对象。
因为只要你的代码,是拿来使用而不是玩的;
总有一个最终派生类,不再是抽象类。
这个最终的派生类是可以实例化的。
那么他的父类子对象,也就可以构造了。
2)派生类继承了父类的构造函数,但是调用形式还是父类的形式。
就是说,只能用于构造父类对象,不能构造派生类对象。
除非你把构造函数,定义成私有函数,否则可以继承。
继承的构造函数,只能用于构造父类对象,不能用于构造子类对象。
于是缺省构造函数,只要父类定义了,子类也就可以使用了。
其他构造函数,因为调用方式不同,编译器并不会自动用,同样参数的构造函数,构造子类对象。
所以只有定义了才可以使用。
2、书上说父类的构造函数是没有被子类继承的,那如何子类在实例化的时候,又能调用类外一个类的函数?
1)抽象类不能实例化,但是可以在初始化表里,调用抽象类的构造函数,构造子类对象。
因为只要你的代码,是拿来使用而不是玩的;
总有一个最终派生类,不再是抽象类。
这个最终的派生类是可以实例化的。
那么他的父类子对象,也就可以构造了。
2)派生类继承了父类的构造函数,但是调用形式还是父类的形式。
就是说,只能用于构造父类对象,不能构造派生类对象。
除非你把构造函数,定义成私有函数,否则可以继承。
继承的构造函数,只能用于构造父类对象,不能用于构造子类对象。
于是缺省构造函数,只要父类定义了,子类也就可以使用了。
其他构造函数,因为调用方式不同,编译器并不会自动用,同样参数的构造函数,构造子类对象。
所以只有定义了才可以使用。
#22
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);
}
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
我所表达的意思是,子类构造函数没有参数,基类构造函数有参数,在建立子对象时,给出了参数,该参数传递给了基类构造函数,对吧。