《面向对象程序设计》高手进~~~~~~~~~~~~!!

第四章
1、有哪几种派生方式?每种方式派生类对其类成员的继承性如何?
2、派生类能否直接访问其类的私有成员?若否,应如何实现?
3、保护成员有哪些特性,保护成员以公有方式私有方式被继承后的访问特性如何?
4、派生类构造函数和析构函数的执行顺序是怎样的?
5、派生类构造函数和析构函数的构造规则是怎样的?
6、什么是多重继承?多重继承时,构造函数和析构函数执行顺序是怎样的?

第六章
1、简述函数模板和模板车函数,类模板和模板类之间的关系如何?
2、函数模板与同名的非模板函数重载时,调用的顺序怎样的?

1.三种派生方式:private public protected
private:只允许在派生类的成员函数中访问基类原有的非私有成员
public:基类中的所有公有成员和保护成员在派生类中认为公有成员和保护 成员,可以通过派生类的成员函数访问基类中所有非私有成员。还可通过派生类的对象直接访问基类中的公有成员。
protected:基类中的所有公有成员和保护成员都成了保护成员,只允许派生类的成员函数及派生类的派生类中的成员函数访问基类的非私有成员,不能通过派生类的对象直接访问基类的任何成员。
2.派生类不能访问基类的私有成员。无论那种派生方式都继承了基类的所有成员,当然也包括私有成员,可以通过调用公有成员函数来访问和设置私有成员。
3.保护成员的特性:能被该类和继承类的成员函数访问。
(基类中的保护成员被公有私有方式继承后的特性看第一题)
4.派生类的构造函数执行之前必先调用基类的构造函数,建立基类的一个对象,当对象生命周期完结之时,先调用派生类的析构函数释放其资源,而后调用基类的析构函数。
5.基类中的构造函数和析构函数都不能被继承。
派生类的构造函数:派生类中的新的或者改造来的成员则需要自己的构造函数,从基类中继承来的则调用基类的构造函数。其中分隐式调用和显式调用。析构函数需派生类中重新构造。
6.多重继承:一个派生类由多个基类派生而来叫做多重继承。多重继承时,首先调用所有基类的构造函数,多个基类的构造函数的调用顺序按照定义派生类时各基类的排序确定,而后调用派生类的构造函数,析构函数为此逆序。

1.调用函数模板时产生一个实例——模板函数;类模板声明时所给出的已经确定了数据类型的类成为模板类,也就是说模板类是类模板的实例。
2.先调用模板函数,将具体的参数数据类型替换生成一个具体的函数使用。
温馨提示:答案为网友推荐,仅供参考
第1个回答  2009-01-08
1、c++将输入输出设备包装成对象,形成了新的输入输出系统
2、cin,cout,cerr,clog
3、cerr不经过缓冲区,直接向显示器输出信息,而clog中的信息存放在缓冲区,缓冲区满或者遇到endl时才输出
4、格式化函数、操作算子
5、打开文件,IO操作,关闭文件按
6、顺序文件,适用于读写连续块中的文本文件,以字符存储。由于是以字符存储,因此不宜存储太长的文件(如大量数字随机文件,适用于读写有固定长度多字段记录的文本文件或二进制文件,以二进制数存储。确定文件指针的位置用成员函数tellp(),tellg()。
第2个回答  2009-01-08
第四章

(1)C++中,描述类继承的语法是: class 派生类名:基类名表 {数据成员和成员函数说明},如果基类名表中只有一个基类,称为单继承;如果基类名表中有多个基类,称为多继承。继承性是由数据成员和成语函数说明中的“访问控制”来定义的,分为三种:public 公有继承;private 私有继承;protected保护继承。如果缺省访问控制符,则默认为私有继承。

(2)无论派生类以何种方式继承基类,都不能使用基类的私有成员。

可以通过定义类的友员来实现对私有成员的访问。友员可以访问类的所有成员,包括私有成员,友员可以是一个普通函数,成员函数或者一个类。

方法:在一个类A中,如果将关键字friend冠以一个函数原型或类名之前,则该函数或类就成为类A的友员。友员不受在类中的说明位置(private,protecte,public)影响,仅仅是声明类A的一个友员。
例子: class A
{private:
int i;
void M(int);
friend void F(A* ,int); //定义F是类A的友员
};
.......
void F(A * ptr, int x)
{ptr -> i=x;}; //友员函数访问类的私有数据成员
void A :: M(int x)
{i=x};
(3)保护成员是对派生类有屏蔽作用。公有继承后,基类的保护成员为派生类的保护成员;私有继承后,基类的保护成员为派生类的私有成员

(4)在主函数运行到与类对应的声明对象时,调用构造函数;
主函数结束后,撤销对应对象时,自动调用解析函数

(5)例子:
#include<iostream.h>
class Date
{ public:
Date();
~Date();
........
};
Date::Date() //定义 构造函数
{.........}
Date::~Date() //定义 解析函数
{.........}

void main()
{Date d; //调用构造函数
........
} //程序结束 自动调用解析函数

(6)一个派生类有多个直接基类,称为“多继承”

多个基类的派生类构造函数用初始式调用基类构造函数,执行顺序与单继承构造函数情况类似:先执行基类构造函数,再执行子对象构造函数,最后执行本身的构造函数。由于多继承的派生类有多个直接基类,他们的构造函数执行顺序取决于定义派生类时指定的各个继承基类的顺序,而与派生类构造函数成员初始化列表中给定的基类顺序无关。

解析函数的调用顺序与单继承相似,特别注意,先调用的后解析,类似堆栈。

第六章

(1)一般函数是对相同类型数据对象(不同值)操作的抽象。函数模板是对相同逻辑结构(不同数据类型)数据对象操作的抽象,是生成不通类型参数重载函数的“模板”。

模板函数是一个函数,是函数模板的实例化,一个函数模板可以实例化多个模板函数。

类模板与模板类与函数模板和模板函数相似。

类模板的成员函数是函数模板,当类模板实例化时,成员函数(函数模板)同时实例化为模板函数

(2)编译器通过匹配过程确定调用哪个函数。匹配顺序如下:

1.寻找和使用最符合函数名和参数类型的模板函数。

2.否则,寻找一个函数模板,将其实例化产生一个匹配的模板函数,若找到,则调用。

3.否则,寻找可以通过类型转换经行参数匹配的重载函数,若找到,则调用。
4.如果按以上均找不到匹配函数,则这个调用是错误的。若这个调用有多余一个的匹配选择,则这个调用也是错误的。

这个答案应该算很详细了,而且还配有程序和注释,看懂应该没有问题,希望对你有所帮助。