C++构造函数怎么用
发表于:2025-11-15 作者:千家信息网编辑
千家信息网最后更新 2025年11月15日,这篇文章给大家分享的是有关C++构造函数怎么用的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。1.作用一种特殊类型的方法,在每次实例化对象时运行2.代码举例2.1 示例1:#
千家信息网最后更新 2025年11月15日C++构造函数怎么用
这篇文章给大家分享的是有关C++构造函数怎么用的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。
1.作用
一种特殊类型的方法,在每次实例化对象时运行
2.代码举例
2.1 示例1:
#includeclass A{ public: float a, b; void print() { std::cout << a << " , " << b << std :: endl; }};int main(){ A a; a.print(); return 1;}
运行结果:

当我们实例化A,系统为它分配内存,我们没有初始化内存,得到的是内存空间原有的那些东西
2.2 示例2:
当在main中添加 std::cout << a.a << " , " << a.b << std :: endl;
int main(){ A a; std::cout << a.a << " , " << a.b << std :: endl; a.print(); return 1;}(ubuntu下 vs code )运行结果:
不同编译器可能不一样,有的会编译不过报错(未初始化局部变量),原因有待深入…
3. 使用
3.1 使用构造函数初始化
#includeclass A{ public: float a, b; A () { a = 0.0f; b = 0.0f; } void print() { std::cout << a << " , " << b << std :: endl; }};int main(){ A a; std::cout << a.a << " , " << a.b << std :: endl; a.print(); return 1;}
结果:

3.2 有参数的构造函数
#includeclass A{ public: float a, b; // 无参构造 A () { a = 0.0f; b = 0.0f; } // 有参构造 A(float c,float d) { a = c; b = d; } void print() { std::cout << a << " , " << b << std :: endl; }};int main(){ A a(5.0,6.0); std::cout << a.a << " , " << a.b << std :: endl; a.print(); return 1;}
一个类可以有很多构造函数 前提是参数个数不同或者参数类型不同
类似于同名函数(函数重载 即有相同的函数名,但是有不同的参数个数与参数类型)
A(float c,float d) { }A(int c,int d){}A(float c,float d,float e){}这里需要注意有参构造的时候注意传值类型
如 float 类型
A a(5.0f , 6.0f);
3.3 默认的构造函数
每个类默认有一个空参空实体的构造函数(如果写了构造函数,则默认构造函数就没有了,需要时需手动添加)
A (){}如果不想使用构造函数有两种方法
// 1 私有化private : A(){}// 2 删掉A() = delete;4. 成员初始化列表
例1:正常初始化
#includeusing namespace std;class Student{private: const char *m_name; int m_age; float m_score;public: // 无参构造 给变量赋定值 Student() { m_name = "aaa"; m_age = 1; m_score = 99.0; } // 有参构造 给变量动态赋值 Student(const char *name, int age, float score) { m_name = name; m_age = age; m_score = score; } void print () { cout << m_name << " ," << m_age << " ," << m_score << endl; }};int main(int argc, char const *argv[]){ Student s1; s1.print(); Student s2("ccc" , 2 , 99.3f); s2.print(); return 0;}
例2:成员初始化列表
#include#include using namespace std;class Student{private: // string m_name; // char *m_name; const char *m_name; int m_age; float m_score;public: // 无参 成员初始化列表 Student() : m_name("bbb") , m_age(2) , m_score(93.0f) { // TODO } // 有参 成员初始化列表 /** * const char *name 常量指针 const 修饰*name *name不可改变 * char * const name 指针常量 const 修饰 name name不可改变 * char const *name 常量指针 等同于 const char *name * * 这里不写const 会报警告 但可以编过 * */ Student(const char *name, int age, float score) : m_name(name) , m_age(age) , m_score(score) { // TODO } void print () { cout << m_name << " ," << m_age << " ," << m_score << endl; }};int main(int argc, char const *argv[]){ Student s1; s1.print(); Student s2("ccc",2,99.3f); s2.print(); return 0;}
运行结果都一样:
aaa ,1 ,99
ccc ,2 ,99.3
使用构造函数初始化列表并没有效率上的优势,仅仅是书写方便,尤其是成员变量较多时,这种写法非常简单明了。
初始化列表可以用于全部成员变量,也可以只用于部分成员变量
Student(char *name, int age, float score): m_name(name){ m_age = age; m_score = score;}NOTE:成员变量的初始化顺序与初始化列表中列出的变量的顺序无关,它只与成员变量在类中声明的顺序有关。
为啥推荐成员初始化列表的写法?
#includeusing namespace std;class Example{public: Example() { cout<< "Create Example" << endl; } Example(int x) { cout<< "Create Example with " << x << endl; }};class A{private: string m_name; // 创建了 Example 的无参构造 对象 Example m_Example;public: A() { m_name = "name"; // 创建新的有参构造对象覆盖第一次赋值 m_Example = Example(1); }};int main(int argc, char const *argv[]){ A a; return 0;}
结果:
A的构造函数换成成员初始化列表的写法
// A() : m_name ("name"),m_Example(Example(1)) 与下面写法相同A() : m_name ("name"),m_Example(1) { }结果:
感谢各位的阅读!关于"C++构造函数怎么用"这篇文章就分享到这里了,希望以上内容可以对大家有一定的帮助,让大家可以学到更多知识,如果觉得文章不错,可以把它分享出去让更多的人看到吧!
函数
成员
变量
结果
参数
类型
不同
写法
a.a
a.b
运行
内存
对象
常量
指针
顺序
C++
相同
个数
内容
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
领英用什么软件开发
北京专业网络技术服务保障
nginx服务器搭建网站
怎么删除小米账号数据库
网络安全整治会议
数据库判断是否类型
网络安全科技馆可靠吗
镇江新品联想服务器服务商
gnudip服务器
下沙服务器商务自助餐
要求建立统一高效的网络安全
苏州通用软件开发价格大全
哪里可以找到软件开发商
网络技术岗非结构化面试答题
专升本英语软件开发
数据库wow
余杭软件开发公司
做软件开发要考计算机等级吗
长城网络技术
如皋正规网络技术推荐咨询
树立正确的网络安全观引导青少年
光遇合并服务器不成功
app软件开发流程分析
软件开发合同争议
wamp 数据库名称
沈阳市开展网络安全宣讲团
网络安全问题机制
怎么将自己的服务器作网盘
数据库 frm
炉石传说干扰服务器怎么解决