C++面向对象程序设计(侯捷)学习笔记(一)

 

1. 课程目标

(1)以良好的方式编写C++的class,基于对象(Object Based)--面对的是单一class的设计

  • 不带指针的类(class without pointer members)
  • 带指针的类(class with pointer members)

(2)学习classes之间的关系,面向对象(Object Oriented)--面对的是多重classes的设计,classes和classes之间的关系。

  • 继承
  • 复合
  • 委托

(3)C++学习内容:分为基础语言和标准库的学习

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

C语言中函数会处理数据,数据拥有不同的类型,因此会产生许多变量。各个函数均可处理根据数据产生的变量。

C++将数据和处理这些数据的函数包在一起(其他函数不可以处理这些数据),组成class(相当于C中的struct),根据这个class可以产生很多对象。

2. C++代码的基本形式

包含三部分:

主程序文件.cpp,包含main函数

类的声明,一般定义为.h文件,在主程序文件中用 “” 引入

标准库,在编译环境中带有,引入利用<>,可以是.h文件,也可以无延伸名。

备注:

标准库中,后缀为.h的头文件c++(98年后)标准已经明确提出不支持了。

C++ <iostream>和<iostream.h>是不一样,在编译器的include文件中是两个文件,代码也不同。

当使用<iostream.h>时,相当于在c中调用库函数,使用的是全局命名空间,也就是早期的c++实现;

当使用<iostream>的时候,该头文件没有定义全局命名空间,C++标准程序库中的所有标识符都被定义于一个名为std的namespace中,必须使用namespace std;这样才能正确使用标准库中的标识符。

3. Header的组成

(1)防卫式说明:防止重复引入,造成重复定义问题。依靠宏的名字,防止宏重名。

#ifndef __COMPLEX__
#define __COMPLEX__
...
#endif

 以下代码若complex.h中,无防卫式声明,下面的代码会报出"./complex.h:7:7: error: redefinition of 'complex'"(重复定义)错误。这是因为,在编译器预编译的阶段,会将.h文件展开成其中的内容,无防卫式声明则会重复定义,造成上面的问题。

#include<iostream>
#include "complex.h"
#include "complex.h"
using namespace std;
int main() {
    const complex c1(2.0,3.0);
    complex c2(2.0);
    return 0;
}

(2)前置声明 & 类的声明

C/C++编译器是由上到下编译的,所以应该在函数/变量的使用前声明或定义,否则编译器找不到会报错。前置声明可以就是告诉编译器有哪些变量或函数,可以先使用,后面再进行定义。

//error: "use of undeclared identifier 'n'"
#include<iostream>
using namespace std;
int func()
{
    return n += 5;
}
int n = 5;
int main()
{
    cout << func();
    return 0;
}

 

//output : 10
#include<iostream>
using namespace std;
int func();
int n = 5;
int main()
{
    cout << func();
    return 0;
}
int func()
{
    return n += 5;
}

前置声

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值