C++构造函数的任务是什么

C++老师留的作业题,哪位大侠帮忙做下,没多少分,但是要求快点,多答多加分发到我的邮箱:[email protected]
一.选择题
1.构造函数的任务是:
A)初始化函数成员 B)为对象分配内存 C)初始化数据成员 D)建立对象

2.成员函数重载双目运算符时,左操作数是:
A)数值 B)对象 C)该函数的参数 D)类名

3.当用public继承从基类派生一个类时,基类的public成员成为派生类的什么成员?
A) public B) private C) protected D) virtual

4.拷贝构造函数用于哪些方面?
A)当函数的形参是类的对象,调用函数时,进行形参与实参结合时使用。
B)当函数的返回值是类对象,函数执行结束返回调用者时使用。
C)当定义对象时使用。
D)用类的一个对象去初始化该类的另一个对象时使用。

二.简答题:
1.解释什么是面向对象程序设计的封装性。

2. 是否使用了虚函数就能实现运行时的多态性?怎样才能实现运行时的多态性?

3.构造函数和析构函数可以继承吗?派生类构造函数各部分的执行次序是怎样的?

4.什么是this指针?简述它的作用。

三.写出下面程序的运行结果
#include<iostream.h>
class base
{ protected:
int a;
public:
base()
{ a=5; cout<<"base a="<<a<<endl; }
};
class base1: virtual public base
{ public:
base1()
{ a=a+10; cout<<"base1 a="<<a<<endl; }
};
class base2: virtual public base
{ public:
base2()
{ a=a+20; cout<<"base2 a="<<a<<endl; }
};
class derived: public base1, public base2
{ public:
derived()
{ cout<<" derived a="<<a<<endl;
}
};
main()
{ derived obj;
return 0;
}
运行结果为:

四.编写程序
1.重载运算符“+”、“-”、“*”、“/”、,使其能实现对复数的运算。
2.构造一个Time类,包含数据成员minute(分)和sec(秒),模拟秒表,每次走1秒,
满60秒进1分钟,此时秒又从0开始算。要求输出分和秒的值。

五.编辑程序:(每题10分,共20分)
1.修改下述程序,使其运行结果为:
Student No. is: 20021, age is: 20.
#include<iostream.h>
class Student
{ int ano;
int age;
float aver;
void printStu();
void setSno(int d);
void setAge(int a)

};
void printStu()
{
cout<<”\nStudent No. is “<<sno<<”, “;
cout<<”age is “<<age<<”.”<<endl;
}
void setSno(int s)
{ sno=s;
}
void setAge(int a)
{ age=a;
}
void main()
{ Student lin;
lin.setSno(20021);
lin.setAge(20);
lin.printStu();
}

2.下述程序编译有错,修改后使其运行结果为:
0 Student exist

please input student No.33

please input student No.88
2 Student exist,y=33
2 Student exist,y=88

#include<iostream.h>
#include<stdlib.h>
class Student
{ private:
static int x;
int Sno;
public:
Student();
{ ++x;
cout<<”\nplease input student No.”;
cin>>Sno;
}
static int get_x()
{ return x; }
int get_Sno()
{ return Sno; }
};
int Student::x=0;
void main()
{ cout<<Student::get_x()<<” Student exist\n”;
Student stu1;
Student *pstu=new Student;
cout<<Student::get_x()<<” Student exist,y=”<<get_Sno()<<”\n”;
cout<<Student::get_x()<<” Student exist,y=”<<get_Sno()<<”\n”;
}

C
B
A
ABD

1.简单解释什么是面向对象程序设计的封装性。
答:对象是一个封装体,在其中封装了该对象所具有的属性和操作。对象作为独立的基本单元,实现了将数据和数据处理相结合的思想。此外,封装特性还体现在可以限制对象中数据和操作的访问权限,从而将属性“隐藏”在对象内部,对外只呈现一定的外部特性和功能。
封装性增加了对象的独立性,C++通过建立数据类型——类,来支持封装和数据隐藏。一个定义完好的类一旦建立,就可看成完全的封装体,作为一个整体单元使用,用户不需要知道这个类是如何工作的,而只需要知道如何使用就行。另一方面,封装增加了数据的可靠性,保护类中的数据不被类以外的程序随意使用。这两个优点十分有利于程序的调试和维护。

2.是否使用了虚函数就能实现运行时的多态性?怎样才能实现运行时的多态性?
答:不是。实现动态多态性时,必须使用基类类型的指针变量或引用,使该指针指向该基类的不同派生类的对象,并通过该指针指向虚函数,才能实现动态的多态性。

3. 构造函数和析构函数可以继承吗?派生类构造函数各部分的执行次序是怎样的?
答:构造函数和析构函数不可以继承。派生类构造函数各部分的执行次序是:
1.调用基类构造函数,按它们在派生类声明的先后顺序,依次调用。
2.调用新增成员对象的构造函数,按它们在类定义中声明的先后顺序,依次调用。
3.派生类的构造函数体中的操作。

4.
一个对象的this指针并不是对象本身的一部分,不会影响sizeof(对象)的结果。this作用域是在类内部,当在类的非静态成员函数中访问类的非静态成员的时候,编译器会自动将对象本身的地址作为一个隐含参数传递给函数。也就是说,即使你没有写上this指针,编译器在编译的时候也是加上this的,它作为非静态成员函数的隐含形参,对各成员的访问均通过this进行。


base a=5
base1 a=15
base2 a=35
derived a=35

还有好多,不想做了....
温馨提示:答案为网友推荐,仅供参考
相似回答