c++构造函数后的两点

smileme 2001-04-30 10:29:00
小弟在看c++的书时对类的构造函数后为何有时接两点(:)大为不解
例如:class Class{
public:
Class(int v):value(v)//就是这里
{ staticV++; }
~Class(){ staticV--; }
int Get(){ return value; }
static int GetStatic();
protected:
int value;
static int staticV;
};
请告诉我
...全文
187 15 打赏 收藏 转发到动态 举报
写回复
用AI写文章
15 条回复
切换为时间正序
请发表友善的回复…
发表回复
l_little 2001-05-15
  • 打赏
  • 举报
回复
在A类中初始化B类对象,因为构造函数不象普通函数那样调用,
也可用于初始化变量
leo2u 2001-05-15
  • 打赏
  • 举报
回复
更正:同样的道理呗,表示在TForm1之前调用父类(TForm)的构造函数进行初始化
leo2u 2001-05-15
  • 打赏
  • 举报
回复
财同样的道理呗,表示在TForm1之前调用交类的构造函数
  • 打赏
  • 举报
回复
class Class{

int value;//前面一定有value存在
public:



Class(int v):value(v)相当于下面的写法:
Class(int v){value=v;}
但更简洁.
skymost 2001-05-06
  • 打赏
  • 举报
回复 1
在构造函数后加:
再加上"数据成员(初值value)"可以实现一些在正常
情况下无法赋值的操作!如对类中的常量,或引用赋值
这才是:的最重要意义,在你的代码中
Class(int v):value(v)
即为将参数v的值赋给value ,当然,你也可以在一个公共
成员函数中实现它!
sxyid 2001-05-06
  • 打赏
  • 举报
回复
//我还有个BCB的问题--------------------------------------------------------
#include <vcl.h>
#pragma hdrstop
#include "Unit1.h"
//------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
//------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
: TForm(Owner)
{
}

//TForm(Owner)之前的“:”表示什么?

sxyid 2001-05-06
  • 打赏
  • 举报
回复
我也有同样的问题,skymost(李天最)帮了的大忙,谢谢skymost(李天最)。
Whoisme 2001-05-06
  • 打赏
  • 举报
回复
前面的几位说的都是对的,以我的理解是:
如果所定义的类是由某个基类派生的,那么它在定义其public成员函数时,有必要把它的基类private成员初始化!
kenryHuang 2001-05-03
  • 打赏
  • 举报
回复
那是初始化参数表
在对引用和常量型的成员变量都要用此种方法来进行初始化
因为这两种变量是一旦初始化就不能改变的
sad_4978 2001-05-02
  • 打赏
  • 举报
回复
那是对保护成员函数赋初值,只是构造函数中含了参数.
例:
class Rectangle
{
private:
float length ,width;
public:
Rectangle(float l=0,float w=0);
float GetLength(void) const;
void PutLength(float l);
float GetWidth(void) const;
void PutWidth(float w);
float Perimeter(void) const;
float Area(void) const;
};
//------------------------------------------------
Rectangle::Rectangle(float l,float w): length(l),width(w)//将l赋值给length,w赋值给width.
{}
ycb_wizard 2001-05-01
  • 打赏
  • 举报
回复
对,就是初始化,具体你的例子就是初始化value的值,value的值为V.
cber 2001-04-30
  • 打赏
  • 举报
回复
member initialization list
用于初始化一些member,尤其是下面的几种动作,一定要在member initialization list中初始化:
reference member的初始化
const member的初始化
base class subobject的有参数的初始化
member class的有参数的初始化

以上抄自inside C++ object model:)
duststar 2001-04-30
  • 打赏
  • 举报
回复
当类是派生的,或类里有其他类成员。基类或是类成员需要参数构造时,就运用这个形式。有时候,如果是成员需要参数时,也可以在构造函数里实现同样的功能。
向你给的例子,就可以在构造函数中写:
value=v;效果是一样的。
有什么问题和我联络:dust2000@sohu.com
magicblue 2001-04-30
  • 打赏
  • 举报
回复
这是基本语法,它表示value这个数据成员要在构造函数构造对象之前就已初始化(所以它的位置在构造函数的左括号之前)建议看看基础的书籍
myan 2001-04-30
  • 打赏
  • 举报
回复
初始化行,为class member等提供初始化的机会。

70,037

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧