注:以下大部分内容来源于 coursera 课程《C++程序设计》
基本概念:
- int的大小: 操作系统16位的时候,int 2字节,操作系统32位的时候,int 4字节,由于32位系统之前占主流地位,实际现在就算是64位系统,出于兼容性考虑,int也是4字节的。
结构化程序设计
- 复杂的问题->层层分解/模块化->若干字问题
- 自顶向下
程序= 数据结构+算法
程序=变量+函数 - 问题:理解难;修改难;查错难;重用难
面向对象程序设计方法
- 面向对象程序设计方法 = 类+类+类+类
- 分析包含了哪些具体的事物, 每个事物都有哪些的特点。不同事物种类之间又存在着怎么样的关系。 事物间呢,又是如何去作用的。
- 构建程序的过程=构建类的过程
- 一类事物(抽象成)数据结构/函数
数据结构/函数(封装成)类
一类事物 | 类 Class |
---|---|
共同属性:数据结构 (用多个变量描述) | data |
行为:函数(作用) | function |
拓展——从客观事物抽象出类
类的定义
class 类名{
访问范围说明符:
成员变量1
成员变量2
成员函数声明1
成员函数声明2
};
例子1:写一个程序,输入矩形的宽和高,输出面积和周长
分析:
矩形的属性(成员变量):宽和高
对矩形的操作(成员函数):设置宽和高;计算面积;计算周长
int w;
int h;
Init();
Area();
Perimeter();
class CRectangle{
public:
int w;
int h;
void Init(int w_, int h_){
w = w_;
h = h_; }
Area(){return w*h;};
Perimeter(){return 2*(w+h);};
};//必须有分号
int main(){
int w,h;
CRectangle r; //声明一个类,r是一个对象
cin>>w>>h;
r.Init(w,h);
cout<<r.Area()<<endl;<<r.Perimeter();
return 0;
}
此例子中,类定义的变量r,也就是类的实例,就是我们称的对象。
- 对象的大小=所有成员变量的大小之和,此处sizeof(CRectangle) =8(int是4字节的)。
- 对象之间可以进行赋值,不能比较。
访问类的成员变量和成员函数
- 用法一:对象名.成员名
CRectangle r1,r2;
r1.w = 5;
r2.Init(3,4);
- 用法二:指针->成员名
CRectangle r1,r2;
CRectangle *p1 = &r1;
CRectangle *p2 = &r2;
p1->w = 5;
p2->Init(3,4);
- 用法三:引用名.成员名
CRectangle r1,r2;
CRectangle &rr = r2;
rr.w = 5;
rr.Init(3,4);
调用函数的输出方式
void PrintRectangle(CRectangle &r){
cout<<r.Area()<<","<<r.Perimeter();
}
CRectangle r3;
rr.Init(3,4);
PrintRectangle(r3);
类的成员函数的另一种写法
class CRectangle{
public:
int w;
int h;
int Area();//成员函数仅在此处声明,但是没有具体操作
int Perimeter();
void Init(int w_, int h_);
};
int main(){
int w,h;
CRectangle r; //声明一个类,r是一个对象
cin>>w>>h;
r.Init(w,h);
cout<<r.Area()<<endl;<<r.Perimeter();
return 0;
}
当成员函数定义在类之外,怎么区分它是一个成员函数而不是普通函数呢?用双冒号::。调用的时候也只能用对象/对象的指针/对象的引用来调用,不能当做普通函数来调用
int CRectangle::Area(){
return w*h;
}
int CRectangle::Perimeter(){
return 2*(w+h);
}
int CRectangle::Init(int w_, int h_){
w = w_;
h = h_;
}
类成员的可访问范围
- private
- public
- protected
缺省为私有成员
类的成员函数内部,可以访问到:1. 当前对象的全部属性,函数;2. 同类其他对象的全部属性,函数。
类的成员函数外部,只能访问到该类对象的public成员。
网友评论