zoukankan      html  css  js  c++  java
  • 面向对象程序设计

    结构化程序设计

    • 复杂大问题 -> 层层分解/模块化 -> 若干子问题
    • 自顶向下,逐步求精
    • 数据结构和算法无关(程序 = 数据结构 + 算法),而是变量和函数的各种调用
    • 问题:理解难、修改难、查错难、重用难

    面向对象程序设计

    • 类+类+类...

    • 设计程序的过程 -> 设计类的过程

    • 抽象、封装、继承、多态

    • 类的定义

    面向对象程序设计发展历程

    java:跨平台时需要修改的代码量很少

    C++

    C++标准的发展

    常用C++编译器

    从客观事物抽象出类

    class CRectangle {
    public:
    	int w, h;
    	void init(int w_, int h_){
    		w = w_;
    		h = h_;
    	}
    	int area() {
    		return w * h;
    	}
    	int 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;
    }
    


    类 -> 类的实例化 -> 对象

    对象的内存分配

    对象间的运算

    访问类的成员变量和成员函数

    类成员函数的另一种写法

    class CRectangle {
    public:
    	int w, h;
    	int area();//声明但不定义成员函数
    	int perimeter();
    	void init(int w_, int h_);
    }; //必须有分号
    
    int CRectangle::area() {
    	return w * h;
    }
    
    int CRectangle::perimeter() {
    	return 2 * (w + h);
    }
    
    void CRectangle::init(int w_ ,int h_) {
    	w = w_; h = h_;
    }
    

    类成员的可访问范围

    通过关键字定义,关键字出现次数和先后顺序没有限制

    • private:私有成员,可以在成员函数内部被访问
    • public:共有成员,可以在任何地方被访问
    • protected:保护成员,继承中会讲到

    类成员的访问权限

    对象成员的访问权限

    举例

    #include<iostream>
    using namespace std;
    
    class CEmployee {
    private:
    	char szName[30];//名字
    
    public:
    	/*以下为成员函数内部,可访问私有变量*/
    	int salary;//工资
    	void setName(char * name);
    	void getName(char * name);
    	void aveSalary(CEmployee e1, CEmployee e2);
    }; //必须有分号
    
    void CEmployee::setName(char * name) { 
    	strcpy(szName, name); //ok
    }
    
    void CEmployee::getName(char * name) {
    	strcpy(name, szName);//ok
    }
    
    void CEmployee::aveSalary(CEmployee e1, CEmployee e2) {
    	salary = (e1.salary + e2.salary) / 2;
    }
    
    int main() {
    	CEmployee e;
    	//strcpy(e.szName,"Tom"); //编译错误,不能访问私有成员
    	char * s = (char*)("Tom");
    	e.setName(s);//
    	e.salary = 5000;//ok
    }
    

    关于strcpt报错 C4996:'strcpy':https://blog.csdn.net/qq_33757398/article/details/81204372/

    • 设置私有成员的目的:强调对成员变量的访问一定要通过成员函数进行。一方面保证安全;另一方面避免程序出错,益于程序的修改。

    • 设置私有成员的机制:隐藏
  • 相关阅读:
    例5-6
    例5-5
    例5-4
    例4-5
    例4-4
    例4-3
    例4-2
    例3-11
    例3-10
    例3-9
  • 原文地址:https://www.cnblogs.com/rookieveteran/p/13804886.html
Copyright © 2011-2022 走看看