c++类

1、初始化const或引用类型数据成员的唯一机会是在构造函数初始化列表中。
2、使用成员初始化列表时成员初始化的次序:第一个成员首先被初始化、然后是第二个,依次类推。
构造函数初始化列表为类的基类和成员提供初始值,它并不指定初始化的执行次序。首先初始化基类,然后根据声明次序初始化派生类的成员。
3、派生类构造函数的要点:
  • 首先创建基类对象
  • 派生类构造函数应该通过成员初始化列表将基类信息传递给基类构造函数
  • 派生类构造函数应初始化派生类新增的数据成员
4、派生类中虚函数的声明必须与基类中的定义方式完全匹配,但有一个例外:返回对基类的引用(指针)的虚函数。派生类中的虚函数可以返回基类函数所返回类型的派生类的引用(或指针)。
5、一旦函数在基类中声明为虚函数,他就一直为虚函数,派生类无法改变该函数为虚函数这一实时。派生类重定义虚函数时,可以使用virtual保留字,但不是必须这样做。
6、派生类对象由多个部分组成:派生类本身定义的(非static)成员加上由基类(非static)成员组成的子对象。
7、如果需要声明(但并不实现)一个派生类,则声明包含类名但不包含派生列表。下面的前向声明会导致编译时错误:
class Bulk_item : public Item_base;
8、可以在运行时确定virtual函数的调用,在编译时确定非virtual调用。
9、如果基类定义了static成员,则整个继承层次中只有一个这样的成员。无论从基类派生出多少个派生类,每个static成员只有一个实例。
10、派生类到基类的引用转换不同于对象转换:一个是将派生类对象转换为基类类型引用,一个是用派生类对象对基类对象进行初始化或赋值。
11、在基类和派生类中使用同一名字的成员函数,其行为与数据成员一样:在派生类作用域中派生类成员将屏蔽基类成员。即使函数原型不同,基类成员也会被屏蔽。(注意与重载的区别)
12、在函数形参表后面写上=0以指定纯虚函数。
13、含有一个或多个纯虚函数的类是抽象基类,抽象基类不能被实例化。
14、如果方法是通过引用或指针而不是对象调用的,它将确定使用哪一种方法。如果 没有使用关键字virtual,程序将根据引用类型或指针类型选择方法;如果使用了virtual,程序将根据引用或指针指向的对象的类型来选择方法。(动态绑定)
15、对于基类,即使它不需要析构函数,也应提供一个虚析构函数,这样做是为了确保释放派生对象时,按正确的顺序调用析构函数。
如果析构函数不是虚的,则将只调用对应于指针类型的析构函数。
16、关键字virtual只用于类声明中,而不用于方法定义中。
17、方法的行为应取决于调用该方法的对象。这种较复杂的行为称为多态——具有多种形态,即同一个方法的行为随上下文而异。有两种机制实现多态共有继承:
  • 在派生类中重新定义基类的方法。
  • 使用虚方法
18、class Dwelling
{
public:
virtual void showperks(int a) const;
...
};
class Hovel : public Dwelling
{
public:
virtual void showperks() const; //此处不是重载,而是重新定义
...
}
重新定义不会生成函数的两个重载版本,而是隐藏了接受一个int参数的基本版本。总之,重新定义继承的方法并不是重载。如果在派生类中重新定义函数,将不是使用相同的函数特征标覆盖基类声明,而是隐藏同名的基类方法,不管参数特征标如何。
经验:
  • 如果重新定义继承的方法,应确保与原来的原型完全相同,但如果返回类型时基类引用或指针,则可以修改为指向派生类的引用或指针。这种特性被称为返回类型协变,因为允许返回类型随类类型的变化而变化。
  • 如果基类声明被重载了,则应在派生类中重新定义所有的基类版本。
19、下述情况将使用复制构造函数:
  • 将新对象初始化为一个同类对象
  • 按值将对象传递给函数
  • 函数按值返回对象
  • 编译器生成历史对象
20、函数不能返回在函数中创建的临时对象的引用,因为当函数结束时,临时对象将消失,因此这种引用将是非法的。在这种情况下,应返回对象,以生成一个调用程序可以使用的副本。
21、使用const:
  • 可以确保 方法不能修改参数:
Start:Start(const char *){...}
  • 可以使用const来确保方法不能修改调用它的对象:
void Star::show() const {...} //这里const表示const Star *this,而this指向调用它的对象

C++类知识总结的更多相关文章

  1. C++ DLL导出类 知识大全

    在公司使用C++ 做开发,公司的大拿搭了一个C++的跨平台开发框架.在C++开发领域我还是个新手,有很多知识要学,比如Dll库的开发. 参考了很多这方面的资料,对DLL有一个基本全面的了解.有一个问题 ...

  2. Java中Properties类知识的总结

    一.Properties类与配置文件 注意:是一个Map集合,该集合中的键值对都是字符串.该集合通常用于对键值对形式的配置文件进行操作. 配置文件:将软件中可变的部分数据可以定义到一个文件中,方便以后 ...

  3. java IO流之——File类知识总结和面试

    File类描述的是一个文件或文件夹.(文件夹也可以称为目录).该类的出现是对文件系统的中的文件以及文件夹进行对象的封装.可以通过对象的思想来操作文件以及文件夹.可以用面向对象的处理问题,通过该对象的方 ...

  4. php类知识 self $this都只能在当前类中使用

    $this是当前对象的指针,self是当前类的指针 $this只能用在成员方法中,不能存在于静态方法 self 静态方法和成员方法中都能使用 self可以访问类常量,静态属性,静态方法,成员方法--- ...

  5. PHP类知识----静态属性和方法

    <?php class mycoach { public $name="陈培昌"; CONST hisage =; ; private $favorite = "喜 ...

  6. php类知识---常量点滴

    常量在类的内部,外部都可以访问,要通过类名::常量名 常量没有访问修饰符 与变量不同的是,常量不能放在双引号中取值,而变量可以 <?phpclass mycoach{ public $name= ...

  7. php类知识---try catch

    <?php try { echo "比赛开始"."\n"; ); } catch (Exception $e ) { echo "获取错误信息: ...

  8. php类知识----特别用法

    spl_autoload_register注册 <?php #spl_autoload_register-----这个例子是用来打印实例化类的类名 function thereisagameof ...

  9. php类知识---命名空间

    <?php #命名空间namespace用来解决类的命名冲突,和引用问题 namespace trainingplan1; class mycoach { public function tra ...

随机推荐

  1. android开发之提高应用启动速度_splash页面瞬间响应_避免APP启动闪白屏

    Application和Activity中的onCreate都进行了优化,基本没有耗时操作,但是启动应用之后还是会闪现一下白色背景,然后才进入Splash页面,对比了一下QQ.微信.微博等客户端,点击 ...

  2. Logback 学习笔记

    来源:http://webinglin.github.io/2015/06/04/Logback-%E5%AD%A6%E4%B9%A0%E7%AC%94%E8%AE%B0/ Logback背景 Log ...

  3. 在Linux上使用C语言编程获取IPv4地址及子网掩码

    在Linux上(如Ubuntu或CentOS), 获取某个Network Interface比如eth0的IP地址等信息,我们可以使用ifconfig或者ip addr show命令. $ ifcon ...

  4. windows 7 做AP

    启动脚本: @echo off netsh wlan set hostednetwork mode=allow ssid=<ap-name> key=<password> ne ...

  5. Redis---1、介绍

    Redis简介: 是以key-value形式存储,和传统的关系型数据库不一样,不一定遵循传统数据库的一些基本要求. 优点: 对数据高并发读写 对海量数据的高效率存储和访问 对数据的可扩展性和高可用行 ...

  6. ssh 连接慢问题

    连接先看报错: There were 11 failed login attempts since the last successful login. 先前有上百上千失败login,被攻击了,把短时 ...

  7. 【转】Java策略消除if else

    策略(Strategy)模式:又名Policy,它的用意是定义一组算法,把它们一个个封装起来,并且使他们可以相互替换.策略模式可以独立于使用他们的客户端而变化.GOF策略模式静态结构类图如下: 通过上 ...

  8. ckeditor添加自定义按钮整合swfupload实现批量上传图片

    ckeditor添加自定义按钮整合swfupload实现批量上传图片给ckeditor添加自定义按钮,由于ckeditor只能上传一张图片,如果要上传多张图片就要结合ckfinder,而ckfinde ...

  9. K:单例模式中存在的问题

      对于单例模式的实现,无论其是否具有懒加载的功能,我们的目标是有且仅生成一个对象.但是,实际上,对于单例模式的一般实现,都会存在着以下的两个问题: 序列化攻击: 对于枚举方式实现的单例模式,并不存在 ...

  10. java 自定义异常处理

    package com.direct.work; import java.io.FileNotFoundException; import java.io.IOException; import ja ...