maoxianmenlian的个人博客分享 http://blog.sciencenet.cn/u/maoxianmenlian

博文

重学C++

已有 3170 次阅读 2013-8-15 16:18 |个人分类:C++|系统分类:科研笔记

1、C++标准库的所有头文件都没有扩展名,所以在包含头文件时不能有.h,例如#include <iostream>

2、使用标准库类型,必须包含相关头文件。《C++ Primer》71页说:“编译时必须加上#include来表示iostream和string标准库,以及给出用到的所有标准库中的名字(如string,cin,cout,endl)的using声明。”,如using std::cin; using std::string。我图省事都是直接用using namespace std;这样貌似浪费空间。

3、是不是做科研的人在使用VC++测试算法时,都是新建一个空项目,然后新建个cpp就开始写代码呢。

4、STL是C++标准库的一部分,不是全部。根据《STL源码剖析》,C++标准库中隶属STL范围者,粗估当在80%以上。在C++标准函数库中,STL主要包含了容器、算法、迭代器。string也可以算做是STL的一部分。关于STL和C++标准函数库的关系可参考:http://morningspace.51.net/resource/stlintro/stlintro.html 1.3.2小节。

 

4、从上面网址中可以了解到VC++中的STL版本是P.J. Plauger STL。

5、《程序员面试宝典》第三版好多错误,譬如对于类成员的定义经常不加public,导致被系统默认为private。P129,对E的解释是错误的,m_nPtd是父类的保护变量,那么派生类的对象岂止是不能修改,连访问都不能。对G的解释貌似也没啥错,但需要补充下,Child2是保护继承Parent的,那么对象cd2是不能访问Parent的所有成员的,自然也不可以直接修改父类的共有变量,可以通过类Child2的成员函数修改父类的共有成员和保护成员。对I的解释也一样。

6、对于公有继承,派生类对象只能访问基类的公有成员,也可以直接修改,但不能访问保护成员和私有成员,对于保护继承和私有继承,派生类对象不能访问基类的所有成员,更不能直接修改。类和类的对象的访问权限是不一样的,所以对于派生类的成员函数又是另一回事,不管是公有、保护还是私有继承,基类的公有成员和保护成员都是可见的,基类的私有成员依然不能访问,基类的私有成员专属于基类。

7、对于派生类的子类,相当于基类的孙子类,又有要注意的。对于公有继承,基类的公有成员和保护成员作为派生类的成员时,依然保持原有状态。对于私有继承,基类的公有成员和保护成员都作为派生类的私有成员,自然不能被其派生类的子类即基类的孙子类访问。对于保护继承,基类公有成员和保护成员都作为派生类的保护成员,并且不能被这个派生类的子类所访问,这点要特别注意,根据前面的规则,子类如果公有继承派生类,应该是可以访问其父类即基类的派生类的保护成员的,但这里因为该保护成员属于其爷爷类,所以不能访问,要特别注意!

8、上一条最后关于保护继承的说明有误!经代码调试,公有继承的孙子类的成员函数是可以访问爷爷类的公有成员和保护成员,因为爷爷类的公有成员和保护成员经父类保护继承后变成了父类的保护成员,所以可以访问。但孙子类的对象是不能直接访问这些成员的。所以上面的说明应该说子类对象是不能访问爷爷类的成员的。

9、抽象基类,基类的虚函数声明为纯虚函数。纯虚函数是在声明时将其初始化为0的函数。

10、抽象类也被成为抽象基类,不能实例化为对象(那些把构造函数都声明为private函数的类也是不能实例化的类),唯一目的就是让其派生类继承并实现它的接口方法。



https://blog.sciencenet.cn/blog-791354-717065.html

上一篇:《Two Views: How Much Math Do Scientists Need?》译文
下一篇:《C++ Primer》第十五章文本查询示例
收藏 IP: 125.71.200.*| 热度|

0

该博文允许注册用户评论 请点击登录 评论 (0 个评论)

数据加载中...

Archiver|手机版|科学网 ( 京ICP备07017567号-12 )

GMT+8, 2024-8-9 03:20

Powered by ScienceNet.cn

Copyright © 2007- 中国科学报社

返回顶部