Chinaunix首页 | 论坛 | 博客
  • 博客访问: 3309
  • 博文数量: 3
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 30
  • 用 户 组: 普通用户
  • 注册时间: 2015-06-07 14:49
文章分类

全部博文(3)

文章存档

2015年(3)

我的朋友
最近访客

分类: C/C++

2015-06-08 20:29:00

1、多重继承时,构造函数的调用顺序是怎样的?
class B: public C,public A
{
private:
int b;
public:
B()
{
}
B(int b):A(b),C(b)
{
cout<<"B construct ..."< }
};
如上,当创建对象B b(1);时,按照继承申明的顺序:public C,public A,先调用C的构造函数,再调用A的构造函数,最后调用B的构造函数

2、C++的访问申明机制
#include
using namespace std;

class A 
{
public:
void printA()
{
cout<<"printA"< }
};

class B: private A
{
public:
void printB()
{
cout<<"printB"< }

A::printA;
};

void main() 
{
B b;
cout< }
对于私有继承,只有子类的成员才能访问父类的成员,外部对象是无法访问的,为了使外部对象也能访问父类成员,可以使用访问申明机制:A::printA;
使得父类中的printA成员函数变为子类B的公有成员函数,这样对象就可以访问了。
总结:访问申明允许调整基类的成员,使之在派生类中保持原来的访问属性


3、多态性通过哪些机制实现的?
静态多态性:函数重载和运算符重载
动态多态性:继承和虚函数

4、重载运算符,什么时候用成员函数什么时候用友元函数?
1)、对单目运算符一般使用成员函数
2)、对=、[]、()、->只能用成员函数
3)、对于+=、-=、*=、/=等复式运算符采用成员函数
4)、除此之外的建议采用友元函数
注:. * :: ?: sizeof这些运算符不可以重载,这里的*指的是指针运算符

X operator++();      //前缀++
X operator++(int);  //后缀++ ,用是否有int来区分,如果是友元函数,int关键字最为最后一个形参

5、类型转换函数
class X
{
int a;
public:
operator int()
{
    return a;
}
}
调用:X obj; cout< 注:只能是成员函数,没有任何参数和返回值

6、虚函数
1)、虚函数是一种动态的函数重载
2)、纯虚函数:virtual void show()=0;
3)、拥有纯虚函数的类叫抽象类,不可以实例化

7、函数模板类似于函数重载,主要区别:
1)、函数模板产生的所有模板函数内部执行的动作是一致的;而重载函数却是可以不一致的
2)、函数模板比函数重载要简洁,但也只是看起来简洁,实际产生的代码占用空间并不少

8、函数模板形参不支持隐式转换

9、函数模板可以和同名重载函数共存:
template
T max(T x, T y)
{return (x>y) ? x : y;}

int max(int,int); //无函数体,借用函数模板的函数体

匹配原则:先寻找完全匹配函数后模板函数,最后尝试隐式转换

阅读(240) | 评论(0) | 转发(0) |
0

上一篇:没有了

下一篇:unix学习笔记

给主人留下些什么吧!~~