C++构造函数怎么用
发表于:2025-02-03 作者:千家信息网编辑
千家信息网最后更新 2025年02月03日,这篇文章给大家分享的是有关C++构造函数怎么用的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。1.作用一种特殊类型的方法,在每次实例化对象时运行2.代码举例2.1 示例1:#
千家信息网最后更新 2025年02月03日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安全错误
数据库的锁怎样保障安全
杰哥网络技术
重庆软件开发培训排名
网络安全第3版答案
上传文件保存到数据库
绍兴网络安全态势感知装置
制造业mes软件开发企业
网络安全与执法特色
服务器上管理多个node
九阴真经全部服务器
离散元软件开发
网络安全审计系统缺陷
树莓派网络安全设置
数据库基础第三版课后习题答案
暗黑3只在数据库的宝石
仓库管理数据库的数据流图
网络安全普法演讲稿
美国网络安全法法条
网络安全教育认识
网络安全中的入侵检测的原理
暗黑破坏神最强服务器
常见的网络安全问题与危害
数据库删除匹配
批量数据库操作教程
腾诚软件开发面试题
网络安全共享文明
慈溪嵌入式软件开发工程
山西潮流软件开发服务价格优惠
进口软件开发工具价格
容器环境下 服务器的信息收集
抖因网络技术有限公司