怎樣使用構造函數(在線等待)

bache1115 2005-03-05 09:16:08
我只知道構造是與所在的類的類名相同,可以初始化類成員變量,但不清楚使用方法.
請舉例說明.(比如如下程序,哪些地方可以用到構造函數,怎樣使用?)
#include<iostream>

using namespace std;

class bache
{
public:
int a,b;
void init(int _a,int _b)
{
a=_a;
b=_b;
}
int count(int a,int b)
{
return a+b;
}
int average(int a,int b)
{
return (a+b)/2;
}
}count;

void main()
{
count.init(10,210);
cout<<count.a<<endl<<count.b<<endl;
cout<<count.count(count.a,count.b)<<endl;
cout<<count.average(count.a,count.b)<<endl;
}
...全文
147 11 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
bache1115 2005-03-06
  • 打赏
  • 举报
回复
原來如此.
#include<iostream>

using namespace std;

class A
{
public:
A()
{
test = 0;
};
~A(){};
int test;
}a;

void main()
{
cout<<a.test<<endl;
}
謝謝各位的幫助!看來是要多看點書了:P
changch84 2005-03-06
  • 打赏
  • 举报
回复
基本上每一本c++初级用书,都会写到构造函数和析构函数的,
ltc_mouse 2005-03-06
  • 打赏
  • 举报
回复
但是這种方式不行,編譯時會報錯:
class A
{
A()
{
test = 0;
};

~A(){};

public:
int test;
};
============================
大概是 flowerfang(方方) 按键快了点吧,它把构造函数放在了私有段
~A() 是析构函数,用于对象释放之前的一些处理。

建议楼主多看书,^_^
bache1115 2005-03-06
  • 打赏
  • 举报
回复
我將程序改為:
#include<iostream>

using namespace std;

class bache
{
public:
int a,b;
bache(int _a,int _b)
{
a=_a;
b=_b;
}
int count(int a,int b)
{
return a+b;
}
int average(int a,int b)
{
return (a+b)/2;
}
};

void main()
{
bache count(200,210);//initialize.Only use this?
cout<<count.a<<endl<<count.b<<endl;
cout<<count.count(count.a,count.b)<<endl;
cout<<count.average(count.a,count.b)<<endl;
}

可以正常編譯通過並運行.
但是這种方式不行,編譯時會報錯:
#include<iostream>

using namespace std;

class A
{
A()
{
test = 0;
};

~A(){};

public:
int test;
};

void main()
{
A a;
cout<<a.test<<endl;
}
Compiling...
class3.cpp
f:\programming\class3.cpp(20) : error C2248: 'A::A' : cannot access private member declared in class 'A'
f:\programming\class3.cpp(7) : see declaration of 'A::A'
f:\programming\class3.cpp(20) : error C2248: 'A::~A' : cannot access private member declared in class 'A'
f:\programming\class3.cpp(12) : see declaration of 'A::~A'
Error executing cl.exe.

class3.obj - 2 error(s), 0 warning(s)

~A(){};是什麼意思,我知道~是求補運算符,用在此處,是指虛函數?
chogo 2005-03-06
  • 打赏
  • 举报
回复
回复人: flowerfang(方方) ( ) 信誉:100 2005-03-05 22:54:00 得分: 0
楼上说得没错,"构造函数是在创建类实例(对象)的时候自动调用的"

比如说:

class A
{
A()
{
test = 0;
};

~A(){};

public:
int test;
}

这个时候,你只要在程序里创建class A的对象a时,a.test就自动被初始化为0了


构造函数用来对类的变量进行初始化,看楼主的代码,函数
void init(int _a,int _b)
{
a=_a;
b=_b;
}
应该是用来初始化的吧,那么就可以把这个函数写成构造函数:
bache(int _a,int _b)
{
a=_a;
b=_b;
}
以后声明类的对象的时候,就可以直接使用了:
bache A(1,2);
代替了
bache A;
A.init(1,2);
seabreeze9802 2005-03-05
  • 打赏
  • 举报
回复
比如一个射击游戏,一开始本机和敌机的位置、武器等级、生命值等总要先初始化吧,这些初始化的工作就是在构造函数里进行的。一般构造函数是创建类对象的时候由类隐式调用的,执行一次就够了,没事不要显式调用。
allywin 2005-03-05
  • 打赏
  • 举报
回复
找本基础书看五分钟就行。
fanofvc 2005-03-05
  • 打赏
  • 举报
回复
构造函数可以重载,你可以写自己的构造函数来初始化你的对象。
flowerfang 2005-03-05
  • 打赏
  • 举报
回复
楼上说得没错,"构造函数是在创建类实例(对象)的时候自动调用的"

比如说:

class A
{
A()
{
test = 0;
};

~A(){};

public:
int test;
}

这个时候,你只要在程序里创建class A的对象a时,a.test就自动被初始化为0了
bache1115 2005-03-05
  • 打赏
  • 举报
回复
??看不怎麼懂,所以才問的.
Salam2001 2005-03-05
  • 打赏
  • 举报
回复
你可能误解了,构造函数是在创建类实例(对象)的时候自动调用的。
你需要负责的是,你想以什么样的方式初始化你的对象,要初始化哪些变量之类的事情。
这个说起来就多了,还是好好看看书吧。

33,321

社区成员

发帖
与我相关
我的任务
社区描述
C/C++ 新手乐园
社区管理员
  • 新手乐园社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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