c++0.1-----不包含指针的类~~~知识点大综合

  本篇文章包含知识点有:预编译,访问权限,内联函数,常成员函数,构造函数,运算符重载函数,友元。

以代码为示范:

文件名:ccompex.h

文件内容:定义一个简单的复数类。

 1 #ifndef __CCOMPLEX__
 2 #define __CCOMPLEX__
 3 #include <iostream>
 4 #include <ostream>
 5 using namespace std;
 6 class complex{
 7 friend complex& __doapl(complex& com1,const complex& com2);
 8 public:
 9     inline const double& real() const {return re;}
10     inline const double& image() const {return im;}
11     inline complex(double r=0.0,double i=0.0):re(r),im(i){}
12 private:
13     double re;
14     double im;
15 };
16
17 inline complex & __doapl(complex &com1,const complex& com2)
18 {
19     com1.re+=com2.re;
20     com1.im+=com2.im;
21     return com1;
22 }
23
24 inline complex & operator+=(complex &com1,const complex& com2)
25 {
26     return __doapl(com1,com2);
27 }
28
29 inline complex operator+(const complex& com1,const complex& com2)
30 {
31     return complex(com1.real()+com2.real(),com1.image()+com2.image());
32 }
33 inline complex operator+(const complex& com1,const double& dou)
34 {
35     return complex(dou+com1.real(),com1.image());
36 }
37 inline complex operator+(const double& dou,const complex& com1)
38 {
39     return complex(dou+com1.real(),com1.image());
40 }
41
42  ostream& operator<<(ostream &os,const complex& x)
43 {
44     os<<‘(‘<<x.real()<<‘,‘<<x.image()<<‘)‘<<endl;
45 }
46
47 #endif // __CCOMPLEX__

这47行代码包含了几个c++精髓,下面让我娓娓道来~~~

一.预编译:#ifndef---#define---#endif 与#include

#ifndef---#define---#endif 代码在第1,2,47行,功能是避免头文件重复调用,在编译的时候合理将代码替换过来。

头铁不信系列:去掉#ifndef---#define---#endif 后,再多次在主文件包含这个头文件,进行编译,编译器给出以下错误信息:

error: redefinition of ‘class complex‘

错误解析:以上错误信息的意思是说对complex类重定义了。也就是说包含多次该文件,若没有预编译的功能,错误就会出现。

#include代码在第3,4行,表示引入一些头文件。

使用方法:系统头文件用<>包住,同时,不需要加.h后缀哦。例如:#include<iostream>

        自定义头文件用" "包住。例如:#include "ccomplex.h"。

二.访问权限:

原文地址:https://www.cnblogs.com/yulianggo/p/9251290.html

时间: 2024-10-14 07:54:17

c++0.1-----不包含指针的类~~~知识点大综合的相关文章

《C++ Primer Plus》16.2 智能指针模板类

智能指针是行为类似于指针的类对象,单这种对象还有其他功能.本节介绍三个可帮助管理动态内存分配的智能指针类.先来看看需要哪些功能以及这些功能是如何实现的.请看下面的函数:void remodel(std::string & str){    std::string * ps = new std::string(str);    ...    str = ps;    return;}您可能发现了其中的缺陷.每当调用时,该函数都分配堆中的内存,单从不回收,从而导致内存泄漏.您肯呢哥也知道解决之道——

C++之中this指针与类的六个默认函数小结

我们先来看看this指针.之前看过一篇关于this指针的文章,觉得写的很好,今天决定自己来写一写,顺便总结一下C++里面关于类的一些内容. 什么是this指针呢?简单的说它是一个指向类的实例的指针,就好像当我们在进入一个房子之后,可以看见房子里的桌子,椅子.地板等, 但是看不到房子的全貌.对于一个类的实例来说,你可以看到它的成员函数.成员变量,但是实例本身呢?this是一个指针,它时时刻刻指向这个实例. 来看看this指针的特性: 1)this指针的类型是一个类类型 * const, 这表示什么

C++_智能指针模板类

智能指针是行为类似于指针的类对象,但这种对象还有其他功能. 本节介绍三个可帮助管理动态内存分配的智能指针模板(auto_ptr.unique_ptr和shared_ptr). void remodel(std:string & str) { std::string * ps = new std::string(str); ... str = ps; return; } 这段代码有缺陷,每当调用时,该函数都分配堆中的内存,但从不回收,从而导致内存泄漏: 但是有解决之道——在return语句前添加下

C++智能指针模板类复习

//C++智能指针模板类复习 #include<iostream> #include<memory> using namespace std; //智能指针用于确保程序不存在内存和资源泄漏且是异常安全的. //C++98中提供了auto_ptr,C++11摒弃了auto_ptr,并提出了unique_ptr .shared_ptr.weak_ptr void show1() { int* p = new int(4); cout << *p << endl;

C++智能指针管理类

1.程序员明确的进行内存释放 对于c++程序员,最头脑的莫过于对动态分配的内存进行管理了.c++在堆上分配的内存,需要程序员负责对分配的内存进行释放.但有时内存的释放看起来并不件很轻松的事,如下程序 void func() { int *p = new int(0); if(一些判断) { return; } p = new int(1); delete p; } 这个函数没有任何意义,只为说明问题.func函数至少有三处问题.1.一旦if的判断条件成立,就会立马执行返回语句.此时p所指向的内存

ActionScript 3.0日期与时间管理(Date类)

/*Flash中,Date类管理着日期和时间信息.要获取   当前日期,可以新建一个Date对象   */var now:Date =new Date();trace (now);     /*输出当前时间和日期,格式如:                  Sun Jul 27 19:45:57 GMT+0800 2014  */ /*以上代码中,Date对象中包括了当前的秒.分.小时.  星期数.日.月.年.时区等信息...如果仅需要返  回星期值和日期值,而不返回时间或时区,可以使用Date

关注C++细节——含有本类对象指针的类的构造函数、析构函数、拷贝构造函数、赋值运算符的例子

本例只是对含有本类对象指针的类的构造函数.析构函数.拷贝构造函数.复制运算符使用方法的一个简单示例,以加深对构造函数和拷贝控制成员的理解. 读C++ primer 5th 第13章后加上自己的理解,完整的写了下课后习题的代码. 第一版: #include <string> #include <iostream> using namespace std; class TreeNode{ private: string value; TreeNode *left; TreeNode *

解决&quot;VC6.0的ClassView里不能显示类或成员变量&quot;问题

VC6.0是微软1998年发布的,是一款很经典的编辑器,然而它有几个很常见的bug,比如, .cpp文件打不开,智能提示出现异常,这里介绍"VC6.0的ClassView里不能显示类或成员变量"问题的解决方法.详细步骤如下: 1) 关闭VC6.0,找到工程目录里的.clw文件,按Del键删除该 .clw文件,如图(1)所示: 图(1)按Del键删除.clw文件 2)打开VC6.0里的工程,按Ctrl+W –> OK,如图(2).图(3).图(4)所示: 图(2)点击"是

Swift3.0语言教程使用指针创建和初始化字符串

Swift3.0语言教程使用指针创建和初始化字符串 Swift3.0语言教程使用指针创建和初始化字符串苹果的Swift团队花了不少功夫来支持C的一些基础特性.C语言中为我们提供了指针,Swift也不例外,开发者可以使用指针去创建和初始化字符串. (1)在NSString中init(bytes:length:encoding:)方法可以从给定字符串按照指定获取方向,得到指定个数的字符,然后使用这些字符创建和初始化字符串.其语法形式如下: convenience init?(bytes: Unsaf