构造派生类


//---------main.cpp------------
#include 
#include 

//继承:构造派生类


using namespace std;

class Student
{
private:
	string name;
	int semesterHours ;
	double average;
public:
	Student(string pName = "noName")        //构造函数,并添加默认值
	{
		name = pName;
		semesterHours= 0;
		average = 0;
	}
	//Student(){std::cout<<"Student ......"<*/<<" ,hours = "<

Advisor ....
GraduateStudent.....
name is : Jack undergraduate ,hours = 3 average = 0.833333
name is : noName ,hours = 3 average = 1
~GraduateStudent....
~Advisor ....
~Student.....
~Student.....
请按任意键继续. . .


派生类也是类,如果没有定义构造函数,则根据类机制,将会执行默认的无参构造函数。派生类的默认无参构造函数会首先调用父类的无参构造函数,如果父类定义了有参构造函数(因此没有默认无参构造函数),又没有重载定义无参构造函数,则会导致编译发怒。如果父类还有父类,则父类会先调用父类的父类的无参构造函数,依次递归。

上面的程序中,父类为Student,在父类中定义无参构造函数,编译时,却出错!

不知为何,为何?????????????

       答案是:Student(string pName = "noName")        //构造函数,并添加默认值
{
name = pName;
semesterHours= 0;
average = 0;
}

这个就是默认构造函数。

就不能再有Student(){std::cout<<"Student ......"<

进一步解释:对于Student(string pName = "noName"),不输入参数是,就是默认的构造函数,如果再定义一个 Student(){std::cout<<"Student ......"<就不知道调用那个构造函数了,所以把 Student(){std::cout<<"Student ......"<

//---------main.cpp------------
#include 
#include 

//

using namespace std;

class A
{
public:
	A(){std::cout<<"A -> "< "<

A ->
B->
<- ~B
 <-~A
请按任意键继续. . .

1


你可能感兴趣的:(C,plus,plus)