C++面向对象高级编程(侯捷)—— 2.头文件与类的声明

Object Based (基于对象) vs. Object Oriented (面向对象)

  • Object Based:单一class的设计
  • Object Oriented:多重class的设计,class与class之间的关系

C++代码的基本形式

C vs. C++

  • 关于数据和函数
    • C的函数用来处理数据
      • 根据数据类型可以创建变量
      • 任何函数都可以处理你的数据
      • C的数据类型有内置类型和结构体struct类型
    • C++的函数和数据封装在一起
      • 根据类可以创建对象
      • 只有该类的成员函数可以处理该类的对象(广义来说)
      • C++扩展了struct(可以有函数),有了class
  • Output
    • #include <cstdio>
    • #include <iostream>

Header(头文件)中的防卫式声明、布局

// complex.h

// guard 防卫式声明
#ifndef __COMPLEX__
#define __COMPLEX__

// 0、forward declarations (前置声明)
#include <cmath>

class ostream;
class complex;

complex&
    __doapl (complex* ths, const complex& r);

// 1、class declarations (类-声明)
class complex
{
    ...
};

// 2、class definition (类-定义)
complex::function ...

#endif
// complex-test.cpp

#include <iostream>
#incldue "complex.h" // *****HERE*****
using namespace std;

int main() {
    ...
}

class - 声明

class complex // class head
{ // class body
public:
    complex (double r = 0, double i = 0) 
        : re (r), im (i) 
    {  }
    // 有些函数在此直接定义,另一些在body之外定义
    complex& operator += (const complex&) ;
    double real () const { return re; }
    double imag () const { return im; }
private:
    double re, im;

    friend complex& __doapl (complex*, const complex&);
};

// .cpp
{
    complex c1(2,1);
    complex c2;
}

class template (模板) 简介

template<typename T>
class complex // class head
{ // class body
public:
    complex (T r = 0, Ti = 0) 
        : re (r), im (i) 
    {  }
    // 有些函数在此直接定义,另一些在body之外定义
    complex& operator += (const complex&) ;
    T real () const { return re; }
    T imag () const { return im; }
private:
    T re, im;

    friend complex& __doapl (complex*, const complex&);
};

// .cpp
{
    complex<double> c1(2.5,1.5);
    complex<int> c2(2,6);
}
发布了17 篇原创文章 · 获赞 2 · 访问量 7531

猜你喜欢

转载自blog.csdn.net/youshiwukong1524/article/details/105319868