1、默认构造函数

默认构造函数要么没有参数,要么所有参数都有默认值。如果没有定义任何构造函数,编译器将自定义默认构造函数。

自动生成的默认的构造函数的作用:

(1)使可以创建对象

(2)调用基类的默认构造函数以及调用本身是对象的成员所属类的默认构造函数。

如果派生类构造函数的成员初始化列表中没有显示地调用基类的构造函数,则编译器将使用基类的默认构造函数构造派生类对象的基类部分。

2、复制构造函数

Class_name(const Class_name &);

在下述情况下,将会使用赋值构造函数:

(1)将新的对象初始化为一个同类的对象。

(2)按值将对象传递给函数

(4)函数按值返回对象

(5)编译器生成临时对象

如果类没有显示定义复制构造函数,编译器将提供一个默认的复制构造函数,逐个复制非静态成员函数(浅复制)。

当类中包含了使用new初始化的指针成员时,默认复制构造函数是不合适的,需要显示定义复制构造函数。

3、赋值操作符

当已有的对象赋给另一个对象时,将使用重载的赋值操作符。

原型如下:

Class_name & Class_name::operator=(const Class_name &);

赋值操作符的隐式实现也是对成员逐个进行复制。当默认赋值操作符不合适的时候,就应当显式定义赋值操作符。

4、析构函数

析构函数一般要定义为虚函数,除非该类不做基类。

使用虚拟的析构函数可以确保按正确的顺序调用析构函数。

5、按值传递对象与传递引用

传递对象的引用的原因:

(1)提高效率

按值传递对象涉及到生成临时拷贝(调用复制构造函数),然后调用析构函数。

(2)多态

基类的引用可以应用派生类的对象

6、返回对象和返回引用

返回引用的原因还是在于提高效率。

但不能总返回引用:

(1)不能返回在函数中创建的临时对象的引用

(2)如果函数返回的是通过引用或指针传递给它的对象,则应返回引用。

(3)如果函数返回在函数中创建的临时对象,则不应该返回引用。

7、不能被继承的函数

构造函数

创建派生类的对象时,必须调用派生类的构造函数。派生类可以通过使用成员初始化列表来调用基类的构造函数。

class Base
{
public:
Base(int a):number(a)
{ }
int GetNumber(){return number;};
private:
int number;
}; class DerivedClass: public Base
{
public:
DerivedClass(int number,int _a)
:Base(number),a(_a)
{ }
int GetA(){return a;}; private:
int a;
};

析构函数

析构函数也是不能被继承的,不过在释放对象时,程序会首先调用派生类的析构函数,然后在调用基类的析构函数。

赋值操作符不能被继承

如果基类构造函数使用new来初始化指针,则必须提供显示的赋值操作符,对于派生类对象的基类部分,C++将使用基类的赋值操作符,所以不需要为派生类重新定义赋值操作符。

如果派生类也使用了new,则必须提供显示赋值操作符。如:

class Base
{
public:
//构造函数
Base(int a):number(a)
{
ch = new char;
*ch = 'A';
}
virtual ~Base()
{
delete ch;
}
//赋值操作符
Base & operator=(const Base & bs)
{
if(this == &bs)
return *this;
delete ch;
ch = new char;
*ch = *(bs.ch);
number = bs.number;
return *this;
} virtual void Show()
{
cout << "Base:number=" << number << " ch=" << *ch << endl;
}
private:
int number;
char *ch;
}; class DerivedClass: public Base
{
public:
DerivedClass(int number,int _a)
:Base(number),a(_a)
{
ch2 = new char;
*ch2 = 'B';
}
~DerivedClass()
{
delete ch2;
}
//赋值操作符
DerivedClass & operator=(const DerivedClass & dc)
{
if(this == &dc)
return *this;
Base::operator=(dc); //调用父类的赋值操作符
a = dc.a;
delete ch2;
ch2 = new char;
*ch2 = *(dc.ch2);
return *this;
} void Show()
{
Base::Show();
cout << "Derived:a=" << a << " ch2=" << *ch2 << endl;
}
private:
int a;
char *ch2;
};

友元函数不能被继承

友元函数并非成员函数,因此不能被继承

C++学习笔记-类相关问题总结的更多相关文章

  1. C#图解教程学习笔记——类相关的概念

    一.一些基本概念1. 字段:隶属于类的变量,即类的成员变量.2. 方法:隶属于类的函数,即类的成员函数.3. 实例成员:类的每个实例拥有自己的各个类成员的副本,这些成员称为实例成员. 改变一个实例字段 ...

  2. MySQL学习笔记-事务相关话题

    事务机制 事务(Transaction)是数据库区别于文件系统的重要特性之一.事务会把数据库从一种一致状态转换为另一个种一致状态.在数据库提交工作时,可以确保其要么所有修改都已经保存了,要么所有修改都 ...

  3. 《python基础教程(第二版)》学习笔记 类和对象(第7章)

    <python基础教程(第二版)>学习笔记 类和对象(第7章) 定义类class Person:    def setName(self,name):        self.name=n ...

  4. Linux 路由 学习笔记 之一 相关的数据结构

    http://blog.csdn.net/lickylin/article/details/38326719 从现在开始学习路由相关的代码,在分析代码之前, 我们还是先分析数据结构,把数据结构之间的关 ...

  5. Java学习笔记--类和对象

    1.介绍面向对象的编程          面向对象是现在主流的编程样例,它替代了以前C语言使用时的“结构体”,Java是一门面向对象的语言,所以需要熟悉面向对象的概念.面向对象的程序由很多对象组成,每 ...

  6. Swift 学习笔记 (类和结构体)

    类和结构体是一种多功能且灵活的构造体.通过使用与现存常量 变量 函数完全相同的语法来在类和结构体中定义属性和方法以添加功能. Swift中不需要你为自定义的类和结构体创建独立的结构和实现文件.在Swi ...

  7. python基础学习笔记——类的约束

    ⾸先, 你要清楚. 约束是对类的约束. 用一个例子说话: 公司让小明给他们的网站完善一个支付功能,小明写了两个类,如下: class QQpay: def pay(self,money): print ...

  8. golang学习笔记 go 相关命令

    go build 命令一些可选项的用途和用法 在运行go build命令的时候,默认不会编译目标代码包所依赖的那些代码包.当然,如果被依赖的代码包的归档文件(*.a)不存在,或者源码文件有了变化,那么 ...

  9. ts 学习笔记 - 类

    目录 类 类的概念 类的用法 属性和方法 类的继承 存取器 静态属性 Typescript 中的用法 抽象类 类的类型 类与接口 类实现接口 接口继承接口 接口继承类 混合类型 类 类的概念 类 (c ...

随机推荐

  1. (转)Direct3d 设备丢失 (device lost)

    1.什么时候设备丢失 一个Direct3D设备, 有两种状态: 操作状态或丢失状态. 操作状态: 是设备的正常状态, 设备按预期运行, 并且能present所有渲染效果 丢失状态: 所有渲染操作悄然失 ...

  2. 开源 java CMS - FreeCMS2.2 建站向导

    项目地址:http://www.freeteam.cn/ 建站向导 为了方便用户创建网站,系统提供了建站向导功能. 从左側管理菜单点击建站向导进入. 第一步:创建网站 能够直接设置所属的父网站.填写相 ...

  3. Struts2_day02--Action获取表单提交数据

    Action获取表单提交数据 1 之前web阶段,提交表单到servlet里面,在servlet里面使用request对象里面的方法获取,getParameter,getParameterMap 2 ...

  4. iOS开发之--使用storyboard下,tabbar小图标和文字颜色的设置

    在开发项目的时候,如果是使用故事版设计的架构,那么在设置tabbar小图标的时候,可能会出现一点小问题, 成功的设置方法如下: 1.设置seleectedImage和image,其实就是非选中状态的图 ...

  5. ImageLoader must be init with configuration before using

    遇到上面的问题是没有全局初使化ImageLoader,我是在Application中配置了ImageLoaderConfiguration 解决的,当然还有官方的写法 public class MyA ...

  6. Fiddler实现手机抓包——小白入门 - 做一个不动声色的大人

    手机用fiddler抓包 电脑最好是笔记本,这样能和手机保持统一局域网内:其他不多说,直接说步骤了. 一.对PC(笔记本)参数进行配置    1. 配置fiddler允许监听到https(fiddle ...

  7. poj_2559 单调栈

    题目大意 给出一个柱形图中柱子的高度,每个柱子的宽度为1,柱子相邻.求出柱形图中可能形成的矩形的最大面积. 题目分析 以每个柱子(高度为h[i])为中心,向两边延展求出以该h[i]为高度的矩形的最大宽 ...

  8. ISP (互联网服务提供商)

    ISP(Internet Service Provider),互联网服务提供商,即向广大用户综合提供互联网接入业务.信息业务.和增值业务的电信运营商. ICP(Internet Content Pro ...

  9. github 's usage

    author:headsen  chen date: 2018-05-30   10:50:56 notice:This  article is created by headsen chen him ...

  10. [SharePoint 2010] 如何在小組網站內頁面上撥放影片或是音效檔

    在SharePoint 2010中, 我們可以像是Youtube一樣在網頁上撥放影片或是音效檔案. 影片或音效是採取串流的方式來撥放. 也就是說我們不需要把整個檔案都下載回來才開始撥放. 點選沒多久我 ...