C++的构造函数与析构函数和类的概念
引言 :
在学习用c++实现链表前先补充一点知识,构造函数还有析构函数。
class类:
在c++面向对象编成中类是一个重要的部分,跟c++中的struct有一定的关联,待会会仔细讲讲两者的区别
c++中类的语法是:
// class 类名
//{
//访问权限 public, private ,protected:
// 属性(成员变量)
// 行为(成员函数)
// };
举例实现:
class hero
{
public:
int _nums;//英雄数量 //命名方式//属性
int _hp;//英雄血量
//行为
void id(int nums)//简单来说就是创建一个函数来调用创建的变量来实现某些功能;
{
_nums = nums;//访问属性
}//把外部值赋值到属性里
void addhp(int hp)//同理,这个是实现加血功能
{
_hp+= hp;
}
void delhp(int hp)//这个是实现扣血功能
{
_hp -= hp;
}
};
int main()
{//通过类来生成对象的过程,叫实列化
hero jeff;//类的实例化,把他用到主函数中来可以进行调用。
jeff._hp = 100;//对其中血量进行修改
jeff._nums = 6;//对数量进行修改
jeff.addhp(200);//实现加血功能
cout << "血量为:" << jeff._hp << endl;//验证是否成功
jeff.delhp(30);//扣血功能
cout << "血量为:" << jeff._hp << endl;
cout << "英雄数量为:" << jeff._id << endl;
}
下面是运行图片:

权限:
概念:公共权限 public 类内类外均可访问
保护权限 protected 类内可访问类外不可访问 子类可以访问
私有权限 private 类内可访问类外不可访问 子类不可访问
B—>A
A 父类,基类 名字,房子 支付密码
B 子类 派生类 公有 保护 私有
代码实例:
class people//只要在这个people类中就可以进行修改
{
public:
int _name;//公有大家都知道的 公共
protected:
int _hourse;//亲属可以居住 保护
private:
int _paypass;//本人知道即可 私有
public:
void name(int name)
{
_name = name;
}
protected: void hourse(int hourse)
{
_hourse = hourse;
}
private: void paypass(int paypass)
{
_paypass = paypass;
}
};
class A :public people//继承 儿子继承父亲的某些东西
{
void hourse(int hourse)
{
_name = 10;
//_paypass = 20;//子类无法访问父类的私有权限
_hourse = 69;
}
};

int main()
{//实例化
people jeff;
jeff._name = 66;
//jeff.hourse = 0;//保护变量类外不可访问
//jeff.paypass = 1;//私有变量类外不可访问
}

上图显示了不可访问说明了在类外无法访问保护和私有的权限。
struct与class的区别和c++与c中struct的区别:
文字概念:
struct的访问权限是公有的 class的访问权限是私有的
c++中struct 可以直接定义函数c不行(会报错)
代码:
class s {
int _ha;//不声明默认变成私有化
};
struct c {
int liu;//默认共有都可以调用
void work()
{
liu = 1314;
}
};
int main()
{
s hahu;
//hahu._ha = 666;//私有 会报错
c kkk;
kkk.liu = 666;
kkk.work();
cout << kkk.liu;
}
错误示例
函数调用:

成功调用了struct 构建的函数。
构造函数与构析函数:
构造函数:
注意的点 1 :构造函数不需要返回值
2构造函数名必须与类名一致
3.构造函数可以有参数
代码示例:
class jeff//在构造的同时就可以对属性进行初始化
{
public: jeff()
{
_name = "JETT";
_weight = 69;
_hight = 1.78;
cout << "构造函数默认调用" << endl;
}
jeff(string a)
{
_name = a;
cout << "构造函数有参调用" << endl;
}
jeff(string a, double b)
{
cout << "构造函数有参调用2参" << endl;
}
private://私有化变量
string _name;
double _weight;
double _hight;
};
int main()
{
jeff kk;//实例化
jeff cc("nba");
jeff aa{};
jeff jj = jeff("hhh");
jeff uu("sss",555);
return 0;
}
运行示例图:
析构函数:与构造函数相对的构造函数是对对象初始化,析构是对函数反初始化,也就是数据清理,减少空间的占用。
注意的点 1:函数名与名一致,并在前面加是~波浪号
2:函数的返回值不用写
3:不能有参数
例代码:
class niu
{
public:
niu()
{
cout << "构造函数调用完毕" << endl;
}
~niu()//语法~加类名 销毁无需参数
{
cout << "析构函数调用完毕" << endl;
}
};
void test()
{
niu o;
}
int main()
{
test();
niu b;
int i;
cin >> i;
return 0;
}

红线的含义是:
函数走完了test这个函数运行并把作用域销毁了
蓝线的含义是:
函数调用了 niu b 这个实例构造函数 但是没走完 停在输入i 这里所以没有销毁。要等程序完全走完才进行销毁。
结语:至此构造和构析函数已经讲完了了,希望大家能去敲一敲代码巩固一下知识。
该篇为了下一篇链表铺垫,有用的话点点关注点点赞收藏。
更多推荐


所有评论(0)