子对象的派生类构造函数以及变量的输入
2016-04-04 21:24
357 查看
初始化数据类源代码:
流插入运算符输入源代码:
总结:
1.利用初始化数据时是一定要定义构造函数的,而且一定要用到的是有参数的构造函数,在使用流提取运算符输入数据时,类中是不需要构建构造函数的,但是在这里的这个源代码中是使用了构造函数,假使这里不使用构造函数的在下面的主函数中是不能够使用Student1定义一个变量的,这点现在还不知道是为什么;还有一个问题就是,假使在类中使用无参数的构造函数时(普通的赋值构造函数)系统会提示编译错误;
2.派生类构造函数的一般形式:
派生类构造函数名(总参数表):基类构造函数名(参数表)
{派生类中新增数据成员初始化语句}
3..有子对象派生类构造函数的一般形式:
派生类构造函数名(总参数表):基类构造函数名(参数表),子对象名(参数表)
{派生类中新增数据成员初始化语句}
4.基类构造函数中总参数表中的参数的顺序是任意,因为编译系统是根据相同的参数名来确立他们的传递关系的;
5.在执行派生类的构造函数时(有子对象),先调用基类构造函数,对基类数据成员初始化,然后调用子对象构造函数,对子对象数据成员初始化,在执行派生类构造函数本身,对派生类数据成员初始化;
<span style="font-size:14px;">#include<iostream> #include<string> using namespace std; class Student { public: Student(int n,string nam){num=n;name=nam;} void Student_cout(); protected: int num; string name; }; void Student::Student_cout() { cout<<"num:"<<num<<endl; cout<<"name:"<<name<<endl; } class Student1:public Student { public: Student1(int n,string nam,int n1,string nam1,int a,string ad):Student(n,nam),monitor(n1,nam1) { age=a; addr=ad; } void Student1_cout(); void Sudent1_monitor_cout(); private: Student monitor; int age; string addr; }; void Student1::Student1_cout() { cout<<"This student is:"<<endl; Student_cout(); cout<<"age:"<<age<<endl; cout<<"address:"<<addr<<endl<<endl; } void Student1::Sudent1_monitor_cout() { cout<<endl<<"Class monitor is"<<endl; monitor.Student_cout(); } int main() { Student1 stud1(10010,"wang_li",10001,"Li_sun",19,"Beijing"); stud1.Student1_cout(); stud1.Sudent1_monitor_cout(); return 0; }</span>运行结果“
流插入运算符输入源代码:
#include<iostream> <span style="font-size:14px;">#include<string> #include<cstring> using namespace std; class Student { public: Student(){} void Student_cin(); void Student_cout(); protected: int num; string name; }; void Student::Student_cin() { cin>>num>>name; } void Student::Student_cout() { cout<<"num:"<<num<<endl; cout<<"name:"<<name<<endl; } class Student1:public Student { public: Student1(){age=0;}; void Student1_cin(); void Student1_monitor_cin(); void Student1_cout(); void Sudent1_monitor_cout(); private: Student monitor; int age; string addr; }; void Student1::Student1_cout() { cout<<"This student is:"<<endl; Student_cout(); cout<<"age:"<<age<<endl; cout<<"address:"<<addr<<endl<<endl; } void Student1::Sudent1_monitor_cout() { cout<<endl<<"Class monitor is"<<endl; monitor.Student_cout(); } void Student1::Student1_cin() { cin>>num>>name>>age>>addr; } void Student1::Student1_monitor_cin() { monitor.Student_cin(); } int main() { Student1 p1; p1.Student1_cin(); p1.Student1_monitor_cin(); p1.Student1_cout(); p1.Sudent1_monitor_cout(); return 0; }</span>运行结果:
总结:
1.利用初始化数据时是一定要定义构造函数的,而且一定要用到的是有参数的构造函数,在使用流提取运算符输入数据时,类中是不需要构建构造函数的,但是在这里的这个源代码中是使用了构造函数,假使这里不使用构造函数的在下面的主函数中是不能够使用Student1定义一个变量的,这点现在还不知道是为什么;还有一个问题就是,假使在类中使用无参数的构造函数时(普通的赋值构造函数)系统会提示编译错误;
2.派生类构造函数的一般形式:
派生类构造函数名(总参数表):基类构造函数名(参数表)
{派生类中新增数据成员初始化语句}
3..有子对象派生类构造函数的一般形式:
派生类构造函数名(总参数表):基类构造函数名(参数表),子对象名(参数表)
{派生类中新增数据成员初始化语句}
4.基类构造函数中总参数表中的参数的顺序是任意,因为编译系统是根据相同的参数名来确立他们的传递关系的;
5.在执行派生类的构造函数时(有子对象),先调用基类构造函数,对基类数据成员初始化,然后调用子对象构造函数,对子对象数据成员初始化,在执行派生类构造函数本身,对派生类数据成员初始化;
相关文章推荐
- Linux安装memcache
- 将单向链表按某值划分成左边小,中间相等,右边大
- jvm(13)-线程安全与锁优化(转)
- C++时间和日期
- 百度前端技术学院-task2.18-2.19源码以及个人总结
- 浏览器缓存机制
- 全排列-递归
- STL与泛型编程<六>:map和multimap
- 整数的补码表示及其运算分析
- Java synchronized的实现原理与应用
- 最快速度求两个数组之交集算法与hash
- 黑马程序员-学习笔记03
- codeforces #305 div1 done
- 构建c/c++项目时添加宏定义
- c++中使用外部库exe,.dll与.lib文件的生成与使用的详解
- 53. Maximum Subarray
- 望日后斩获奖项 冯绍峰首次出席金像奖
- 二维码生成和解析
- 【BZOJ1455】罗马游戏
- 编译原理课程作业1 消除无用产生式