C++面向对象高级编程(一)

 

目录

 

1、C+代码基本形式

2、Header (頭文件) 布局以及class声明

3、class template (模板)

4、inline内联函数

5、access level (訪問級別)

6、构造函数初始化

7、构造函数重载:构造函数有多种不同的参数传人

8、 常量成员函数:最好加入const

9、参数传递和返回值都是用const引用

10、友元函数:只有朋友才能访问我私有参数

11、运算符重载this指针


1、C+代码基本形式

2、Header (頭文件) 布局以及class声明

3、class template (模板)

定义方式:template<typename T>

private里面是不能改变参数类型的,我们通过引入template模版,定义不同typename(int/double/float等)类型,将private里面的类型参数化。

4、inline内联函数

概念:inline关键字用来定义一个类的内联函数,引入它的主要原因是用它替代C中表达式形式的宏定义,解决一些频繁调用的小函数大量消耗栈空间(栈内存)的问题。

注意:

a、inline的使用是有所限制的,inline只适合涵数体内代码简单的涵数使用,不能包含复杂的结构控制语句例如while、switch,并且不能内联函数本身不能是直接递归函数(即,自己内部还调用自己的函数)。

b、inline函数仅仅是一个对编译器的建议,所以最后能否真正内联,看编译器的意思,它如果认为函数不复杂,能在调用点展开,就会真正内联,并不是说声明了内联就会内联,声明内联只是一个建议而已。

c.定义在类中的成员函数缺省都是内联的,如果在类定义时就在类内给出函数定义,那当然最好。如果在类中未给出成员函数定义,而又想内联该函数的话,那在类外要加上inline,否则就认为不是内联的。

5、access level (訪問級別)

概念: 类之外不能直接调用private里面的参数,只能在类内定义函数来传递值,如下图所示:

6、构造函数初始化

成员变量再构造函数中初始化中使用":"函数方式性能比直接在构造函数中赋值要快,建议使用这种方式。

7、构造函数重载:构造函数有多种不同的参数传人

黄色标注的构造函数定义将出现问题,如果该函数与上面构造函数同时出现,在无参初始化该类对象时将产生冲突,因为第一个构造函数已经有参数默认初始化列表了,定义该类对象时可以不加入参数,这就产生了冲突。

8、 常量成员函数:最好加入const

在一个类中,如果成员函数中没有改变成员函数操作(例如get操作),那么建议在该方法声明处加入const关键字,如果不加入const关键字,那么c++编译器将认为该函数可能会修改类的成员变量。这样做有个好处,可以看到上图的"?!"一图,使用者利用了const关键字定义并通过构造函数初始化了一个complex类,这个类将不能被修改,只能读取属性。当使用者调用complex的real()或者imag()方法时,如果这两个方法在定义处没有加入const关键字,那么将报错。

9、参数传递和返回值都是用const引用

函数参数传递,如果不需要改变参数值,建议使用const reference减小开销。

返回值建议使用引用,但如果返回引用的是该函数的一个指向堆局部变量指针,例如*ptr,那么不能使用引用,因为该局部变量在函数调用后就以及销毁了,引用可以认为是给当前对象换了个别名,如果当前对象已经被销毁,那么该“别名”也就失去了意义,不存在了。

当然,如下图所示,对于临时变量也不能返回引用:

10、友元函数:只有朋友才能访问我私有参数

11、运算符重载this指针

在运算符重载过程中隐藏了this指针,该指针编译器会处理,使用者不能显式声明。

code

#include<iostream>

using namespace std;

class A
{
	public:
		//构造函数
		A();
		//重载:构造函数有多种不同的参数传人
		A(int a = 0, int b = 0):i(a),j(b){ }
		//析构函数
		~A();
        int get_i()const {return i;}
        int get_j()const {return j;}
	private:
		int i, j;
};

A::A()
{
	cout << "执行默认构造函数" << endl;
}
 
A::~A()
{
	cout << "执行析构函数" << endl;
}


int main ()
{
	A a(1,2);
	cout << a.get_i() << ' ' << a.get_j()<<endl;
	A b(1);
	cout << b.get_i() << ' ' << b.get_j()<<endl;
}

 

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值