引言
C++是从C语言发展演变而来的一种新型的、以向对象为特征的程序设计语言,本章首先阐述面向对象的基本概念、基本特征、程序设计和软件开发;然后介绍C++语言的产生、特点、发展和应用,以及C++程序的一般开发过程;最后通过详细剖析一个简单的C++程序实例带领学习者逐步进入C++精彩的编程世界
面向对象程序设计概述
面向对象程序设计(OOP)是一种以对象为核心的编程范式,强调数据抽象、封装、继承和多态性。与传统的面向过程编程不同,OOP将数据和操作数据的方法绑定为独立的单元(即对象),从而提升代码的可维护性和复用性。C++作为支持OOP的语言,兼容C语言的特性,同时提供了类、对象等高级特性。
类与对象的基本概念
类是用户自定义的数据类型,包含数据成员(属性)和成员函数(方法)。在同一个类的不同对象之间具有以下特征: (1)相同的属性; (2)相同的方法; (3)不同的对象名; (4)不同的属性值(对于那些可以改变的属性值)例如:
class Circle {
private:
double radius; // 数据成员
public:
void setRadius(double r) { radius = r; } // 成员函数
double getArea() { return 3.14 * radius * radius; }
};
对象是类的具体实例,通过.运算符访问成员:
Circle c1;
c1.setRadius(5.0);
cout << c1.getArea(); // 输出78.5
封装与访问控制
封装通过访问修饰符(public、private、protected)实现数据隐藏。public成员可在类外访问,private成员仅限类内访问。例如:
class Person {
private:
string name; // 私有成员
public:
void setName(string n) { name = n; } // 公有方法
string getName() { return name; }
};
这种设计保护了数据完整性,避免外部直接修改。
面向对象的优势
- 模块化:类将相关数据和方法集中管理。
- 代码复用:继承允许派生类重用基类代码。
- 灵活性:多态支持同一接口的不同实现。
- 易维护:修改类的内部实现不影响外部调用。
C++与面向对象的关系
C++在C语言基础上扩展了面向对象特性。C语言以函数为基本模块,而C++以类和对象为核心。类定义了对象的属性和行为,对象是类的实例化。通过封装(隐藏内部实现细节)、继承(建立类之间的层次关系)和多态(同一操作作用于不同对象产生不同行为),C++实现了更灵活的代码组织方式。
C++语言特点
- 支持面向对象的程序设计
- 支持泛型程序设计
- 功能强大的标准模板库
- C++语言是一种更好的“C语言”
C++语言的发展
| 时间范围 | 20世纪80年代末-1995年 | 1995年-2000年 | 2000年-2005年 | 2008年及之后 |
| 发展阶段 | 初步普及阶段 | 标准化与生态扩展阶段 | 国际标准化与版本迭代阶段 | 现代特性丰富阶段 |
C++程序实例
/*************************************
* 功能:显示“HELLO C++!” *
*************************************/
#include<iostream> //载入头文件
using namespace std; //使用命名文件std
int main() //程序入口
{
cout<<"HELLO C++!"<<endl;
return 0;
}
注意:
(1)C++程序中用到的关键字(非自定义),例如本程序中的include、using、namespace、 main、cout、endl等一律为小写英文字母。
(2)程序中用到的待号,例如本程序中的/、*、<、>、#、(、)、(、)、;、"等一律カ英文符号,不能是全角中文符号。
使用名字空间std 的方法
标准C++库提供的对象等都放在标准名字空间std中,使用名字空间std 的方法如下:
1.利用using namespace使用名字空间
using namespace std;
表明此后程序中的所有对象如没有特别声明,均来自名字空间std.
2.用域分辨符::为对象分别指定名字空间
std.:cout<"Hello C++"<<std::end1;
分别指明了此处cout、endl的名字空间。
3.用using与域分辨符指定名字空间使用方法如下:
using atd::cout,
表明此后的cout对象如没有特别声明,均取自名字空间std中。
| 操纵符 | 作用 | 说明 |
| Oct | 数据以八进制形式输出 | 作用范围为后续输出的整数对象,小数不起作用 |
| Dex | 数据以十进制形式输出(默认) | |
| Hex | 数据以十六进制形式输出 | |
| Endl | 换行并刷新输出流 | |
| setw(n) | 设置输出宽度 | 仅对后一个对象起作用,需包括头文件iomanip |
| nsetprecision(n) | 设置输出小数位数(默认为6) | 作用范围为后续对象,需包括头文件iomanip |
课后习题
1.编写一程序输出用*组成的菱形图案。
#include<iostream> //载入头文件
#include<iomanip>
using namespace std; //使用名字空间
int main()
{
int n=4;
int i,j,k; //i表示循环次数
for(i=1;i<=n;i++) //上半部分
{
for(j=1;j<=n-i;j++){ //每行输出的空格数
cout<<" ";
}
for(k=1;k<=2*i-1;k++) //每行输出的星号数
{
cout<<"*";
}
cout<<endl;
}
for(i=n-1;i>=1;i--) //下半部分
{
for(j=1;j<=n-i;j++){
cout<<" ";
}
for(k=1;k<=2*i-1;k++)
{
cout<<"*";
}
cout<<endl;
}
return 0;
}
2. 编写一程序,输入任意十进制数,将其以八进制、十六进制的形式输出。
#include <iostream>
using namespace std;
int main()
{
int decimal;
cout << "请输入一个十进制数:";
cin >> decimal;
cout << "八进制形式:" << oct << decimal << endl; //输出八进制
cout << "十六进制形式:" << hex << decimal << endl; //输出十六进制
return 0;
}
3.仿照本章例题设计一个程序,输入两个数,将它们相除,观察为无限循环小数时按精度从小到大输出的结果。
#include <iostream>
#include <iomanip>
using namespace std;
int main()
{
double num1, num2;
cout << "请输入第一个数:";
cin >> num1;
cout << "请输入第二个数:";
cin >> num2;
double result = num1 / num2;
// 按不同精度输出
cout << "精度为 1:" << fixed << setprecision(1) << result << endl;
cout << "精度为 2:" << fixed << setprecision(2) << result << endl;
cout << "精度为 3:" << fixed << setprecision(3) << result << endl;
cout << "精度为 4:" << fixed << setprecision(4) << result << endl;
cout << "精度为 5:" << fixed << setprecision(5) << result << endl; //fixed 强制浮点数以“固定小数位数”的格式输出,当使用fixed后,函数的含义会明确变为“保留n位小数”
return 0;
}

5411

被折叠的 条评论
为什么被折叠?



