《C++标准程序库》读书笔记(一)

1,很多编译器都要求模板的定义和实现都在头文件中,这是因为必须先为他提供某个实现品,然后才能调用,也只有如此才能通过编译。目前唯一能让“template的运用具有可移植性的方式,就是在头文件中以inline function实现temlate function

2,下面typename指出SubTypeT中定义的一个型别,若不用这个关键字,则编译器会认为是两个数相乘,而不是定义的指针。

<!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--> class classA
{
public :
typedef
int SubType;
};
template
< typenameT >
class MyClass
{
typenameT::SubType
* ptr;
};
int main()
{
MyClass
< classA > c1;
return 0 ;
}

3,类成员函数可以是模板函数,但这样的成员模板函数不能是虚拟的,也不能有缺省参数。下面这个例子中assign函数中,由于参数x*this类型不同,不能直接存取private成员,而必须通过公有方法getValue访问。模板构造函数用于在复制对象时实现隐式类型转换,但它并不会屏蔽隐式拷贝构造函数,只要类型完全吻合,隐式拷贝构造函数就会被产生出来并被调用。

<!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--> template < typenameT >
class MyClass
{
private :
Tvalue;
public :
MyClass()
{
value
= T();
}
MyClass(Tval)
{
value
= val;
}
template
< typenameX >
MyClass(
const MyClass < X >& x)
{
assign(x);
}
template
< typenameX >
assign(
const MyClass < X >& x)
{
value
= x.getValue();
}
TgetValue()
{
return value;
}
};

int main()
{
MyClass
< int > c1( 10 );
MyClass
< int > c2(c1); // callsbuilt-incopyctor
MyClass < double > c3(c1); // templatector
cout << c2.getValue() << endl;
return 0 ;
}

(为什么这段代码在vc6下编译通过,但在vs2005下无法编译通过?

4, dynamic_cast将多态类型向下转换为其实际静态类型,若转换失败则会丢出一个bad_cast异常。const_cast设定或去除类型的常熟性,也可以用来去除volatile,这些操作法只接受一个参数。

5,从标准异常类别中派生新类别

<!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--> class MyException: public exception
{
public :
MyException(
char * msg):exception(msg)
{
}
virtual const char * what() const throw ()
{
return exception::what();
}
};

void fun()
{
throw MyException( " erroroccour " );
}
int main()
{
try
{
fun();
}
catch ( const MyException & exp)
{
cout
<< " justatest " << endl;
}

return 0 ;
}

6auto_ptr不允许使用一般指针惯用的赋值初始化方式,必须使用数值来完成初始化:

<!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--> auto_ptr < classA > ptr( new classA);
auto_ptr
< classA > ptr2;
ptr2
= auto_ptr < classA > ( new classA);

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值