class <类名>
{
public:
<类名>(参数表)
//(还可以声明其它成员函数)
};
<类名>::<类名>(参数表)
{
//函数体
}
如以下定义是合法的:
class T
{
public:
T(int a=0){i=a;}//构造函数允许直接写在类定义内,也允许有参数表。
private:int i;
};
当程序中没有析构函数时,系统会自动生成以下构造函数:
<类名>::<类名>(){},即不执行任何 *** 作。 [编辑本段]C++例子//注意若将本代码直接复制进编译器,可能会报错,原因是网页生成时会在代码前加一个中文占位符
//最好将代码再写一次
#include <iostream>
using namespace std;
class time
{
public:
time() //constructor构造函数
{
hour=0;
minute=0;
sec=0;
}
void set_time();
void show_time();
private:
int hour;
int minute;
int sec;
};
int main()
{
class time t1;
t1show_time();
t1set_time();
t1show_time();
return 0;
}
void time::set_time()
{
cin >>hour;
cin >>minute;
cin >>sec;
}
void time::show_time()
{ cout<<hour<<":"<<minute<<":"<<sec<<endl;
}
程序运行情况:
0:0:0
10 11 11 回车
10:11:11
任何时候,只要创建类或结构,就会调用它的构造函数。类或结构可能有多个接受不同参数的构造函数。构造函数使得程序员可设置默认值、限制实例化以及编写灵活且便于阅读的代码。
JAVA示例代码:
public class UserManagerImpl implements UserManager {
private UserDao userDao;
public UserManagerImpl(UserDao userDao){
thisuserDao=userDao;
}
public void save(String username,String password){
thisuserDaosave(username, password);
}
}
PHP中的构造函数
构造函数的声明与其它 *** 作的声明一样,只是其名称必须是两个下划线__construct( )。这是PHP5中的变化;PHP4的版本中,构造函数的名称必须与类名相同。为了向下兼容,如果一个类中没有名为__construct( )的方法,PHP将搜索一个与类名相同的方法。
格式:function __construct ( [参数] ) { }
例子:
<php
class person{
public $name;
public $age;
function _ _construct(){ // 构造函数
$this->name="lisi";
$this->age=28;
}
function say(){
echo "my name is "$this->name"<br>";
echo "my age is "$this->age"<p>";
}
}
$per=new person();
$per->say();
$per->name="zhangsan";
$per->age=26;
$per->say();
>你好!
无参构造函数,写不写都可以,即使不写,编译器也会给你加一个默认构造函数的
析构函数写成虚函数,在这个例子当中没有发现这么写的必要,但是这样写有一个好处
就是当派生类中析构函数有 *** 作时,调用基类函数指针进行delete *** 作,同样可以执行派生类析构函数
所以在基类析构函数没有任何 *** 作情况下,把它定义成虚函数
如果对你有帮助,望采纳。// 下面是我修正的代码
#include<iostream>
using namespace std;
class student {
private:
char name;
int math;
int english;
int ccc;
public:
student(const char n, int m, int e, int c)
{
name = new char[100]; // 为了配合你的delete,我使用new创建了一个数组。
strcpy_s(name, 100, n); // 字符串拷贝函数,来初始化name
math = m;
english = e;
ccc = c;
}
~student() {
delete[] name; // 只有被new[]的对象,才需要使用delete[]进行析构。
cout << name << "同学对象被回收" << endl;
};
void average() {
int a;
a = (math + english + ccc)(1 / 3);
cout << name << " " << a << endl;
}
};
int main()
{
student stu[10] = {
student("a", 10,20,30),
student("b", 10,20,30),
student("c", 10,20,30),
student("d", 10,20,30),
student("e", 10,20,30),
student("f", 10,20,30),
student("g", 10,20,30),
student("h", 10,20,30),
student("i", 10,20,30),
// student("j", 10,20,30), // 只有10个元素,所以我删除一个
student("j", 10,20,30), };
stu[0]average();
stu[1]average();
stu[2]average();
stu[3]average();
stu[4]average();
stu[5]average();
stu[6]average();
stu[7]average();
stu[8]average();
stu[9]average();
// ~student(); // 析构函数不能由用户进行调用。
return 0;
}析构函数
是对象在失效时执行的函数,常常用来释放一些不会自动释放的空间
比如,你的类中有指针类型,在程序运行过程中用
new
来分配了一些空间给这个指针,在对象失效的时候,就需要把这些空间释放掉。否则,可用内存就会越来越少(内存泄漏)。这些 *** 作就需要在析构函数中处理构造函数一般是用来进行初试化的,看你需要对哪些属性进行初始化
#include<iostreamh>
#include<stringh>
class student
{
public:
char name[10];
float score;
student(char[],float);//这里形式参数就是你要初试化的变量的类型。
~student();
};
student::student(char temp[10],float score1)
{
strcpy(name,temp);
score=score1;
cout<<name<<endl;
cout<<score<<endl;
}
student::~student()
{
cout<<"调用析构函数";
}
void main()
{
student stu("sunhong",99);
}
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)