【C++面向对象高级编程】知识点总结(1)

本文总结了C++面向对象编程的一些高级知识点,包括C和C++的区别、头文件的防卫式声明、内联函数的作用、初始化列表的效率优势、const的使用、参数传递的方式、this指针的应用、返回值传递的选择,以及拷贝构造、拷贝赋值和析构函数在处理深浅拷贝问题中的重要性。
摘要由CSDN通过智能技术生成

一些小知识点

关于C和C++

在C语言中,数据和方法(函数)是分开的,用数据来创造变量。

而在C++的类中(struct,class),数据和函数是可以放在一起的(成员数据,成员函数),由这两者共同产生对象。

image-20220115131927710

关于class,也可以看作两大类:带有指针的和不带有指针的。

这两类在实现上有一定的区别,因为不带有指针的可以被class包含在一起。

而带有指针的(比如字符串),会在内存其他地方调用空间,在类中只有指向该空间的指针。

关于头文件

#ifndef ...
#define ...
...
#endif

这样的声明属于防卫式声明,可以防止多个文件中重复的include。

关于内联函数(inline)

内联函数可以解决一些频繁调用的函数大量消耗栈空间(栈内存)的问题。

这里提到一个inline候选人的概念,也就是说是不是真正的inline需要由编译器来决定,函数越简单越有可能。

如果函数在class内定义,则自动成为inline候选人。

如果在class外,可以在前面加上inline声明,但是能不能被选入要看编译器。

inline double imag(const complex& x){
	return x.imag();
}

关于初始化列表

有时的构造函数会以初始化列表的形式出现。

class complex{
public:
	complex (double r=0,double i=0)
	:re(r),im(i){}
private:
    double re,im;
}

也可以使用赋值的方法,比如re=r,但在效率上有差异,这也是使用初始化列表的原因。

这里的例子使用了默认实参,要注意默认实参重载时可能会与无参数发生冲突,编译器无法判断属于哪一类。

构造函数也可以放在private区,也就是不允许外界构造。(是一种设计模式Singleton)

关于const

后面会对const深入探讨,这里先引入一下。我们可以换个角度理解const。在你不想改变值的情况下就加上const,可以在函数后或者变量之前。

 class complex{
 public:    
 	complex (double r=0,double i=0)    :re(r),im(i){}
 	double real() const {return re;}
 	double imag() co
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值