注册 登录  
 加关注
查看详情
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

蒙奇D小豌豆的博客

蒙奇D小豌豆的学习记录

 
 
 

日志

 
 

C++学习五之其他  

2013-01-31 21:08:38|  分类: language |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |
大型程序工具

1 当抛出一个表达式的时候,被抛出对象的静态编译时类型将决定异常对象的类型

2 栈展开期间,释放局部对象所用的内存并调用析构函数

3 析构函数不应该抛出异常,会产生abort函数使程序终止

4 catch句子的异常说明符后面跟一个可选形参名的类型名,必须为内置类型或者已定义的类

5 catch类似函数,参数匹配的时候必须相同类型,只能从非const到const,派生类到基类,数组向指针,函数向函数指针转换。不允许算数转换盒类定义转换

6 catch所有异常 catch(...) {}

7 如果一个函数没有指定异常说明,则该函数可以抛出任意类型的异常。但是如果设定为void func() throw(), 则表示没有任何异常,如果函数抛出异常 则会导致程序终止

8 命名空间不已分号结束,可以是不连续的。未命名空间namespace {} 只属于特定文件,从不跨多个文件,用作取代静态什么。如果头文件包含了未命名空间,那么在每个包含该头文件中有不同的实体。

9 using声明:一次只引入一个命名空间成员(using std::string)。using指示: 使指定的整个命名空间提升 using namespace std;

10 using声明与重载:只能using NS::print(不能具体某个print), 指定函数名所以所有print函数都能使用,

11 派生类有可能从2个或多个基类继承同名成员,不加限制使用会产生二义性。通过直接调用指定使用哪个类可以解决二义性。

12 public virtual: 虚继承构造函数 先依次构造层次中的虚基类,再依次构造其他非基类


特殊工具与技术
1 运行时类型识别: 1)dynamic_cast:把基类指针转换为继承类指针,如果不能转换返回0指针,如果是引用的话,转换失败抛出bad_cast
 2)typeid:用于比较2个表达式的类型。 typeid(*baseptr) == typeid(Derived),只有当操作数时代虚函数的类类型对象的时候,不能是指针。
2 类成员指针
class A
{
public:
int get(){ return data;}
private:
int data;
string s;
};

1) 数据成员指针 string A::*p = &A::s;
2) 函数成员指针 int (A::*f) = A::get;
3) 使用成员函数指针  A a; (a.*f)(); // equal a.get  
A *a = new A(); (a->*f)() //equal a->get()
4) 使用成员指针   A a; a.*s; // equal a.s  
A *a = new A(); a->*s //equal a->s

3 匿名union在类中必须是public成员,可以直接通过类访问union内部成员
class Token
{
public:
union
{
char a;
int s;
}
};
Token t;
t.a = 2;

4 C++调用c程序 单个extern "c" void func(){}; 复合extern "c"{ xxxx; xxxx;}. C语言不支持重载,所以不能同时extern "c"2个同名函数
5 用extern "c"定义的函数 在声明的时候也必须加上相同的链接指示


more
C++的static
静态数据成员
  在类中,静态成员可以实现多个对象之间的数据共享,并且使用静态数据成员还不会破坏隐藏的原则,即保证了安全性。因此,静态成员是类的所有对象中共享的成员,而不是某个对象的成员。
  使用静态数据成员可以节省内存,因为它是所有对象所公有的,因此,对多个对象来说,静态数据成员只存储一处,供所有对象共用。静态数据成员的值对每个对象都是一样,但它的值是可以更新的。只要对静态数据成员的值更新一次,保证所有对象存取更新后的相同的值,这样可以提高时间效率。

静态成员函数
  静态成员函数和静态数据成员一样,它们都属于类的静态成员,它们都不是对象成员。因此,对静态成员的引用不需要用对象名。
  在静态成员函数的实现中不能直接引用类中说明的非静态成员,可以引用类中说明的静态成员。如果静态成员函数中要引用非静态成员时,可通过对象来引用。



c++ 重载 覆盖 隐藏的区别和执行方式
成员函数被重载的特征
(1)相同的范围(在同一个类中);
(2)函数名字相同;
(3)参数不同;
(4)virtual 关键字可有可无。
覆盖是指派生类函数覆盖基类函数,特征是
(1)不同的范围(分别位于派生类与基类);
(2)函数名字相同;
(3)参数相同,返回相同;
(4)基类函数必须有virtual 关键字。
“隐藏”是指派生类的函数屏蔽了与其同名的基类函数,规则如下
(1)如果派生类的函数与基类的函数同名,但是参数不同。此时,不论有无virtual关键字,基类的函数将被隐藏(注意别与重载混淆)。
(2)如果派生类的函数与基类的函数同名,并且参数也相同,但是基类函数没有virtual 关键字。此时,基类的函数被隐藏(注意别与覆盖混淆) 
  评论这张
 
阅读(145)| 评论(0)

历史上的今天

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2018