首页 > 编程语言 >[侯捷_C++面向对象高级开发_上] 2 头文件和类的声明

[侯捷_C++面向对象高级开发_上] 2 头文件和类的声明

时间:2023-10-23 17:23:15浏览次数:41  
标签:const double C++ re complex 侯捷 头文件 include class

1. C vs C++ 关于数据和函数

  • C
    • Data
    • Functions
    • 对于C来说,数据大部分情况是所有函数都可以访问的,这样对程序来说会变得很混乱
  • C++
    • Data Members
    • Member Functions
    • 对于C++来说,数据和函数封装在一起形成类,可以设定为数据只能让类里的函数访问,具有良好的组织性

2. C++ 关于数据和函数

  • 不带指针 Complex
    • 成员
      • 成员变量:实部、虚部
      • 成员函数:加、减、乘、除、共轭、正弦...
    • 初始方式
      • complex c1(2,1);
      • complex c2;
      • complex *pc = new complex(0,1);
  • 带指针 String
    • 成员
      • 成员变量:字符(s):其实是个ptr,指向一串字符
      • 成员函数:拷贝、输出、附加、插入
    • 初始方式
      • string s1("hello ");
      • string s2("world ");
      • string *ps = new string;

3. Object Based 基于对象 vs Object Oriented 面向对象

  • Object Based:面对的是单一class的设计
  • Object Oriented:面对的多重classes的设计,classes和classes之间的关系

4. C++ programs代码基本形式

ex.main()Classed
Declaration
(声明)
Standard
Library
(标准库)
 #include <iostream.h>
.h (header files).cpp.h (header files) #include <iostream.h>

延伸文件名(extension file name)不一定是.h或者.cpp
也可能是.hpp或者其他或者甚至无延伸名

5. Output C++ vs C

  • C++
    #include <iostream.h> // #include <iostream>
    using namespace std;
    int main()
    {
        int i =7;
        cout << "i=" << i << endl;
        return 0;
    } 
    
  • C
    #include <stdio.h> // #include <cstdio>
    
    int main()
    {
        int i = 7;
        printf("i=%d\n",i);
        return 0;
    }
    

6. Header(头文件)的防重复声明

  • complex.h

    #ifndef __COMPLEX__
    #define __COMPLEX__
    
    ...
    
    #endif
    
  • complex-test.cpp

    #include <iostream>
    #include "complex.h"
    using namespace std;
    
    int main()
    {
        complex c1(2,1);
        complex c2;
        cout << c1 << endl;
        cout << c2 << endl;
        
        c2 = c1 + 5;
        c2 = 7 + c1;
        c2 = c1 + c2;
        c2 += c1;
        c2 += 3;
        c2 = -c1;
            
        cout << (c1 == c2) << endl;
        cout << (c1 != c2) << endl;
        cout << conj(c1) <<endl;
        return 0;
    }
    
    

7. 头文件布局 class的声明

     #ifndef COMPLEX
     #define COMPLEX
  #include <cmath.h>

  class ostram;
  calss complex;
  
  complex &__doap1(complex this,const complex &r);
forward declarations
(前置声明)
  class complex
  {
   ...
   };

  complex::function ...
#endifclass declarations
(类-声明)
class definition
(类-定义)
 class complex
 {
 public:
complex (double r = 0,double i = 0)
: re (r) , im (i) 
{  }
complex & operator +=  (const comlex&);
double real() const {return re;}
double imag() const {return im;}
 private:
double re,im;
friend complex& __doap1 (complex
,const complex&);
 };
有些函数在此直接定义,另一些在body之外定义{
complex c1(2,1);
complex c2;
...
}
class的声明(declaration)

8. class template 模板 简介

 class complex
 {
 public:
complex (double r = 0,double i = 0)
: re (r) , im (i) 
{  }
complex & operator +=  (const comlex&);
double real() const {return re;}
double imag() const {return im;}
 private:
double re,im;
friend complex& __doap1 (complex,const complex&);
 };
有些函数在此直接定义,另一些在body之外定义class的声明(declaration) template<typename T> 
 class complex
 {
 public:
complex (T r = 0,T i = 0)
: re (r) , im (i) 
{  }
complex & operator +=  (const comlex&);
T real() const {return re;}
T imag() const {return im;}
 private:
T re,im;
friend complex& __doap1 (complex
,const complex&);
 };
 {
complex c1(2,1);
complex c2;
...
 }
 {
complex<double> c1(2.5,1.5);
complex<int> c2(2,6);
...
 }
模板化

标签:const,double,C++,re,complex,侯捷,头文件,include,class
From: https://www.cnblogs.com/staraire/p/17782987.html

相关文章

  • C++迭代器iterator遍历
    iterator是通用的遍历容器的方式通用模板anySet<a...>as;anySet<a...>::iteratorit=as.begin();for(;it!=as.end();it++){cout<<(*it);//即迭代器it指向的元素}四种迭代器正向迭代器,定义方法如下:容器类名::iterator迭代器名;常量正向迭代器,定义......
  • C++U4-贪心算法1
    本节学习目标:贪心算法的概念以及对应练习题 贪心算法概念贪心算法的特点 利用贪心算法的两个性质 练习1:最优装载问题  【本题算法分析】优先把重量小的物品放进去,在容量固定的情况下,装的物品量最多。因此采用重量最轻者先装的贪心选择策略,可从局部最优达到......
  • C?C++?
    代码逆向在这里需要注意的几个点:c#语言赋值号(=)右边的值同样会跟着左边的值改变,如array6=array2,array6+=2;这个时候array2也会变如array7[num5] += text2[k] % '\u0005';,逆向则为array7【num5】-=ord(text【k】)%5,即chr-->ord空格的ASCII为32则逆向代码为v6=35j=0......
  • 如何从C++Pytho:变的思维方
    有人说用Python编程很简单,6岁小孩都能学会。计算机视觉专家和编程语言爱好者asyaf刚开始上手Python时也这么想。但门槛低就仅意味着使用简单吗?经常调用API的人是不是一定比可以从零写出源码的人菜?在本文中,asyaf告诉我们,从C++转向Python,是一次「从个人到社区」的思维......
  • 解决Clion中写多个C++文件中存在多个main函数报错的问题
    解决Clion中写多个C++文件中存在多个main函数报错的问题在刷题写C++的时候,常常因为要写多个文件,这时存在多个main就会报错,通常解决这个问题会有以下两种解决方法:把不需要的main给注释掉新建一个Project项目这边我介绍一种新的办法:(适用于IDEA)1.先下载这个插件,C/C++Single......
  • 让Devc++使用c11标准
    默认情况下,C语言编译器gcc4.7.2不符合任何ANSI/ISOC标准。当前默认值等效于-std=gnu90,这是1989/1990标准,扩展名为GNU-specific。  如果要实现标准一致性,比如c89,c90,c99或c11,可以使用以下任意一种:-std=c90-pedantic-std=c99-pedantic-std=c11-pedantic-std=c90也可以......
  • Modern C++ Overview综览
    ##PartI:Language(第一篇:语言)-大局观——简直像个新语言给出一个完整实例,展示(几乎)所有新特性的样貌,让学员从真实代码中一次性窥得(几乎)全豹,得知即将面对的新知和挑战。-auto,typededuction型别/型态推导是ModernC++至关重要的某种基础;这一节为后头诸多特性打好基础。-......
  • 挑战用很多种方法解决A+B(c++)
    写在前面的本文章主要是博主自己想写。水篇文章。正常作法#include<bits/stdc++.h>usingnamespacestd;intmain(){ inta,b; cin>>a>>b; cout<<a+b; return0;}数组#include<bits/stdc++.h>usingnamespacestd;intmain(){ inta[3]; cin>>a[1]>......
  • C++零基础教程(引用)
    (文章目录)前言本篇文章我们来讲解C++中非常重要的一个概念,这个概念就是引用,引用在C++中经常使用,下面就让我们来看看到底什么是引用吧。一、引用概念介绍及使用方法在C++中,引用是一种别名,它允许我们使用一个已经存在的对象来创建一个新的名称。引用提供了一种更直观、简洁和安......
  • C++中的RTTI机制、多继承中的虚函数
    C++中的RTTI机制基类有虚函数时才能实现RTTI机制:基类无虚函数时,typeid(*pA)返回的是pA声明时的类型。基类有虚函数时,typeid(*pA)返回的是pA指向对象的类型。比较两个带有虚函数的类的对象是否相等if(typeid(*a)==typeid(B))if(dynamic_cast<B*>(a)):如果能够成功向......