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. 多线程编程(三)-CountDownLatch的使用

    CountDownLatch的介绍 类CountDownLatch是同步功能得一个辅助类,使用效果就是给定一个计数,当使用CountDownLatch类的线程判断计数不为0时,则呈wait状态,如果是 ...

  2. 反射 XMLUtil

    package com.dys.util; import java.beans.Introspector; import java.beans.PropertyDescriptor; import j ...

  3. An Introduction to Computer Thinking

    1.Die Grundlage des Computers 1.1 Binärzahl in die Dezimalzahl umsetzen Bereiten nach Gewicht,dann b ...

  4. Windows下编程--模拟时钟的实现

    windows下编程--模拟时钟的实现: 主要可以分为几个步骤: (1)   编写按键事件处理(启动和停止时钟) (2)   编写时钟事件处理,调用显示时钟函数 (3)   编写显示时钟函数,要调用显 ...

  5. 动态生成自定义控件ascx如何给ascx传值

    有机会看到有网友在论坛上发出问题: 在网页上的铵钮执行之后,动态加载的用户控件,如果没有处理好,会在子用户控件的铵钮被执行时抛弃.因此我们需要着重需要处理的关键点.同相子用户控件在动态加载之后,它的状 ...

  6. 十一:image 图片

    属性名 类型 默认值 说明 src String   图片资源地址 mode String 'scaleToFill' 图片裁剪.缩放的模式 binderror HandleEvent   当错误发生 ...

  7. MySQL学习基础

    MySQL是被Sun公司收购了,所以也有热咖啡图标,不过MySQL的作者后来又做了一个MariaDB,小海豚图标,也很好用. MySQL学习: <MySQL网络数据库设计与开发>(电子工业 ...

  8. unity assetStore 常用插件

    常用插件 20180723============= 教程类 =============<Mecanim Example Scenes > 官方示例场景<Surivial Shoot ...

  9. linux运维人员成长

    原文地址:https://blog.csdn.net/kwame211/article/details/78059331 初级篇 linux运维人员常用工具拓扑详见: 1rsync工具 很多地方经常会 ...

  10. [javaSE] GUI(鼠标事件)

    调用Button对象的addMouseListener方法,参数:MouseListener对象,这个类是个接口,需要实现以下方法 mouseClicked mousePressed mouseRel ...