当前位置: 首页 > news >正文

构造函数后面加冒号,这傻逼玩意,有病吧

简单的讲:冒号后面跟的是赋值,这种写法是C++的特性。这麻痹特性有毛病。。。
A( int aa, int bb ):a(aa),b(bb)
{
}
相当于
A( int aa, int bb )
{
a=aa;
b=bb;
}

 

来一段经典代码:

#include <iostream>
using namespace std;
class B1 
{public:
 B1(int i) 
 {cout<<"consB1"<<i<<endl;}
};//定义基类B1
class B2  
{public:
 B2(int j) 
 {cout<<"consB2"<<j<<endl;}
};//定义基类B2
class B3 
{
public:
  B3()
  {cout<<"consB3 *"<<endl;}
};//定义基类B3
class C: public B2, public B1, public B3 
{public: 
  C(int a,int b,int c,int d,int e)
   :B1(a),memberB2(d),memberB1(c),B2(b)
  {m=e; cout<<"consC"<<endl;}
private:
 B1 memberB1;
 B2 memberB2;
 B3 memberB3;
 int m;
};//继承类C
int main()
{ C  obj(1,2,3,4,5); return 0; }//主函数

结果:

consB22
consB11
consB3 *
consB13
consB24
consB3 *
consC

自己好好看看研究。

其实冒号后的内容是初始化成员列表,一般有三种情况:
    1、对含有对象成员的对象进行初始化,例如,
    类line有两个私有对象成员startpoint、endpoint,line的构造函数写成:
    line(int sx,int sy,int ex,int ey):startpoint(sx,sy),endpoint(ex,ey){……}
    初始化时按照类定义中对象成员的顺序分别调用各自对象的构造函数,再执行自己的构造函数
    2、对于不含对象成员的对象,初始化时也可以套用上面的格式,例如,
    类rectangle有两个数据成员length、width,其构造函数写成:
    rectangle():length(1),width(2){}
    rectangle(int x,int y):length(x),width(y){}
    3、对父类进行初始化,例如,
    CDlgCalcDlg的父类是MFC类CDialog,其构造函数写为:
    CDlgCalcDlg(CWnd* pParent ): CDialog(CDlgCalcDlg::IDD, pParent)
    其中IDD是一个枚举元素,标志对话框模板的ID
    使用初始化成员列表对对象进行初始化,有时是必须的,有时是出于提高效率的考虑

阅读(4626)| 评论(1)

相关文章:

  • 奇异矩阵和非奇异矩阵 行列式矩阵简单理解 代数意义 几何意义 行列式的定义: 二阶行列式的几何意义: 三阶行列式的几何意义: 行列式化为对角形的几何解释: 二阶行列式乘积项的几何意
  • 最短路径问题---Dijkstra算法详解
  • c++的const和static区别
  • C++纯虚函数,虚函数
  • 拷贝构造函数,深拷贝,浅拷贝
  • 数据结构十进制转二进制
  • 线性代数点积,对偶
  • 对偶性的实质,向量内积就是矩阵叉乘
  • Unable to resolve dependency for ':app@debugAndroidTest/compileClasspath':以及:android studio 中的proxy
  • C语言的printf输出格式控制
  • C++ 构造函数初始化调用顺序及类函数内部嵌套函数情况
  • C++运算符重载
  • c++父类指针指向子类对象
  • 关于++运算,时刻注意数值的更新
  • c++中的char类型简单分析
  • ERLANG 网工修炼笔记 ---- UDP
  • Eureka 2.0 开源流产,真的对你影响很大吗?
  • IOS评论框不贴底(ios12新bug)
  • Linux后台研发超实用命令总结
  • Map集合、散列表、红黑树介绍
  • node入门
  • opencv python Meanshift 和 Camshift
  • PAT A1120
  • PHP的Ev教程三(Periodic watcher)
  • SQLServer之创建显式事务
  • vue从创建到完整的饿了么(11)组件的使用(svg图标及watch的简单使用)
  • 汉诺塔算法
  • 欢迎参加第二届中国游戏开发者大会
  • 蓝海存储开关机注意事项总结
  • 离散点最小(凸)包围边界查找
  • 那些被忽略的 JavaScript 数组方法细节
  • 排序(1):冒泡排序
  • 扫描识别控件Dynamic Web TWAIN v12.2发布,改进SSL证书
  • 使用docker-compose进行多节点部署
  • 微信开源mars源码分析1—上层samples分析
  • 问题之ssh中Host key verification failed的解决
  • 小程序01:wepy框架整合iview webapp UI
  • 一份游戏开发学习路线
  • 自定义函数
  • LIGO、Virgo第三轮探测告捷,同时探测到一对黑洞合并产生的引力波事件 ...
  • $refs 、$nextTic、动态组件、name的使用
  • (4)事件处理——(7)简单事件(Simple events)
  • (C++17) std算法之执行策略 execution
  • (超简单)构建高可用网络应用:使用Nginx进行负载均衡与健康检查
  • (二)WCF的Binding模型
  • (介绍与使用)物联网NodeMCUESP8266(ESP-12F)连接新版onenet mqtt协议实现上传数据(温湿度)和下发指令(控制LED灯)
  • (三)docker:Dockerfile构建容器运行jar包
  • (四)Android布局类型(线性布局LinearLayout)
  • (中等) HDU 4370 0 or 1,建模+Dijkstra。
  • (转)创业的注意事项
  • (转)德国人的记事本
  • (转)如何上传第三方jar包至Maven私服让maven项目可以使用第三方jar包
  • (轉)JSON.stringify 语法实例讲解
  • .equal()和==的区别 怎样判断字符串为空问题: Illegal invoke-super to void nio.file.AccessDeniedException
  • .NET 4.0中使用内存映射文件实现进程通讯