随笔 - 1760  文章 - 0  评论 - 109  阅读 - 431万

3. 构造函数

1. inline(内联)函数

inline函数很好,其优点是:传的速度快。那所有函数都做成inline()函数岂不是很好,有的函数即便放在class body内完成定义,编译器也没办法变成inline()函数。简单的函数可以,复杂的不可以。如下面的两个函数,都是只是返回一个数据,如此简单的函数想必编译器有能力把它做成inline()函数。

如果函数没在class body内定义,而是在class body内声明,class body外定义,此时还是想把它写成inline()函数,那么只需要在函数的开头加上“inline” 关键字即可。

 

 2. 访问级别

访问级别是指public:和private:所形成的区域。前者形成的区域是可以被外界访问的区域,后者形成的区域是不可以被外界访问的区域。private:区域永远可以被它的兄弟public:区域访问。

没有特殊情况的话:

  • 数据一般放在private区域。
  • 函数一般放在public区域。

 3. 构造函数(大主题)

C++说,在利用类名创建一个对象的时候,有一个函数会被自动调用,这个函数就是构造函数。

构造函数的特点:

  • 没有返回值类型,也不需要有,不必有;
  • 用创建实例的时候传递进来的参数值去初始化私有变量;

  • 可以在函数(大括号)内部去初始化私有变量,但是函数名后面冒号后初始化更好。大括号内部初始化未尝不可,但是动作稍微晚了一点,效率变低了一点(侯捷老师的话是:效率上差了一点)。

 

 

 4. 析构函数

不带指针的class多半不用写析构函数,像上面这个例子就不用写析构函数。

 

 5. 构造函数可以有很多个,这就是overloading(构造函数的重载),在使用类创建对象的时候,有多少个想法就可以创建多少个形状不同的构造函数,形状不同指的是函数参数个数不同

下面这个构造函数的重载形式不可以,因为当创建下列两个对象时,编译器会犯傻,不知道该调用哪个构造函数。

{
    complex c1();
    complex c2;
}

因为创建这两个对象的时候,都没有提供参数值,所有似乎调用哪个都可以(只要提供默认值的都可以),此时构造函数会起冲突。重载可以,带歧义的重载不可以。

6. 非构造函数的重载

重名函数,人看相同,编译器会把它们编译成名字不同的函数,编译后的名字人看不懂。

 

posted on   一杯明月  阅读(507)  评论(0编辑  收藏  举报
编辑推荐:
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
阅读排行:
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5

点击右上角即可分享
微信分享提示