C++模板、面向对象内容补充

C++模板如何实现

模板是一种对类型进行参数化的工具,通常有两种形式:函数模板和类模板;函数模板针对仅参数类型不同的函数;类模板针对仅数据成员和成员函数类型不同的类。

使用模板的目的就是能够让程序员编写与类型无关的代码。模板的声明或定义只能在全局,命名空间或类范围内进行。即不能在局部范围,函数内进行,比如不能在main函数中声明或定义一个模板。

1)函数模板:template <class T> void swap(T& a, T& b){}

2)类模板:template<class T> class A{public: T a; T b; T hy(T c, T &d);};

template<class T1,class T2> void A<T1,T2>::h(){}

2、模板特化

1)模板的特化是在已有的通用模板不再适用于一些特殊的类型参数时,而针对这些特殊的类型参数专门实现的模板。

2)模板的偏特化是指需要根据模板的部分参数进行特化。

3)函数调用匹配的规则是:先精确匹配类型参数,然后匹配函数模板,最后通过参数隐式类型转换进行匹配。

3、explicit是干什么用的?防止隐私转换

4、 必须在构造函数初始化式里进行初始化的数据成员有哪些?

1)常量成员,因为常量只能初始化不能赋值,所以必须放在初始化列表里面

2)引用类型,引用必须在定义的时候初始化,并且不能重新赋值,所以也要写在初始化列表里面

3)没有默认构造函数的类类型,因为使用初始化列表可以不必调用默认构造函数来初始化,而是直接调用拷贝构造函数初始化

5为什么基类的析构函数是虚函数?

在实现多态时,当用基类操作派生类,在析构时防止只析构基类而不析构派生类的状况发生。

6如何实现只能动态分配类对象,不能定义类对象?

1)动态分配类对象:就是使用运算符new来创建一个类的对象,在堆上分配内存。

把类的构造函数和析构函数设为protected属性。类对象不能访问,但是派生类可以继承,也可以访问。同时,创建create和destroy两个函数,用于创建类对象。

create函数设为static,原因是,创建对象的时候A *p=A::create().只有静态成员函数才能有类名直接访问)

(2)静态分配类对象:就是A a,由编译器创建类对象,在栈上分配内存。

重载new和delete

7、继承与组合的区别

is-a关系用继承表达,has-a关系用组合表达,组合耦合度小,容易扩展,继承耦合度太大了,应该优先使用组合,而非继承。

当我们想重用原类型作为新类型的内部实现的话,我们最好自己组合,如果我们不仅想重用内部实现而且还想重用接口的话,那就用继承。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值