C++面向对象程序设计的一些知识点(2)
2013-11-16 09:49
162 查看
1、C++中三种继承方式及派生类中访问控制规则
(1)、C++支持的三种继承方式是public、protected、private。C++允许一个类同时以不同的方式对不同的基类加以继承。
(2)、
不同继承方式下基类成员在派生类中的访问控制
注意:在派生类中,表中所述的访问控制“private”和“no access”存在很大的差别。对来自基类且在派生类中访问控制为“no access”的成员,
在派生类中是不可见的(自然,派生类的外部也不可见);对来自基类且在派生类中访问控制为“private”的子成员,在派生类内部可以访问它
们,但在派生类外部不可以访问它们。
2、派生类对象内存模型分析
(1)、程序运行时派生类对象或存在于函数栈中或存在于系统给程序分配的堆中,它是一段物理内存。
(2)、派生类与基类之间的关系是一种“is-a”的关系,否则在逻辑上必然造成混乱。
()
3、派生类对象的构造过程和析构过程
(1)、在继承方向上,先基类对象,后派生类子对象;在同一层次上,先包含类子对象,再本类子对象;如果在同一层次上存在多个包含类子
对象时,按照声明顺序来构造。
View Code
(1)、C++支持的三种继承方式是public、protected、private。C++允许一个类同时以不同的方式对不同的基类加以继承。
(2)、
继承方式 | 基类成员访问控制 | ||
public | protected | private | |
public | public | protected | no access |
protected | protected | protected | no access |
private | private | private | no access |
在派生类中是不可见的(自然,派生类的外部也不可见);对来自基类且在派生类中访问控制为“private”的子成员,在派生类内部可以访问它
们,但在派生类外部不可以访问它们。
2、派生类对象内存模型分析
(1)、程序运行时派生类对象或存在于函数栈中或存在于系统给程序分配的堆中,它是一段物理内存。
(2)、派生类与基类之间的关系是一种“is-a”的关系,否则在逻辑上必然造成混乱。
()
3、派生类对象的构造过程和析构过程
(1)、在继承方向上,先基类对象,后派生类子对象;在同一层次上,先包含类子对象,再本类子对象;如果在同一层次上存在多个包含类子
对象时,按照声明顺序来构造。
#include <iostream> using namespace std; class Employee { public: Employee(char *name) { no = companyEmployee++; grade = 1; pName = new char[strlen(name) + 1]; strcpy(pName, name); totalPay = 0.0; } ~Employee() { delete [] pName; } public: void pay(){} void promote(int increment) { grade += increment; } void displayInfo(){} protected: char *pName; int no; int grade; double totalPay; static int companyEmployee; private: }; int Employee::companyEmployee = 100; // 静态变量初始化 class Technician:public Employee { public: Technician(char *name, int workHours = 0):Employee(name) { rate = 100; // 100元/小时 this->workHours = workHours; } void setWorkhours(int workHours) { this->workHours = workHours; } void pay() { totalPay = workHours*rate; } void displayInfo() { promote(2); cout << "兼职技术人员:" << pName << ",编号:" << no << ",级别:" << grade << ",已付本月工资:" << totalPay << endl; } private: double rate; int workHours; }; class SaleMan:virtual public Employee { public: SaleMan(char *name, int sales = 0):Employee(name) { ratio = 0.004; this->sales = sales; } void setSales(double sales) { this->sales = sales; } void pay() { totalPay = sales*ratio; } void displayInfo() { promote(2); cout << "推销员:" << pName << ",编号:" << no << ",级别:" << grade << ",已付本月工资:" << totalPay << endl; } protected: double sales; double ratio; }; class Manager:virtual public Employee { public: Manager(char *name, int monthlyPay = 6000):Employee(name) { this->monthlyPay = monthlyPay; } void setMonthlyPay(double monthlyPay) { this->monthlyPay = monthlyPay; } void pay() { totalPay = monthlyPay; } void displayInfo() { promote(3); cout << "经理:" << pName << ",编号:" << no << ",级别:" << grade << ",已付本月工资:" << totalPay << endl; } protected: double monthlyPay; }; class SaleManager:public SaleMan, public Manager { public: SaleManager(char *name):SaleMan(name), Manager(name), Employee(name) { monthlyPay = 4000; ratio = 0.002; } void pay() { totalPay = monthlyPay + sales*ratio; } void displayInfo() { promote(2); cout << "销售经理:" << pName << ",编号:" << no << ",级别:" << grade << ",已付本月工资:" << totalPay << endl; } private: }; int main() { Technician t("zhang san"); t.setWorkhours(100); t.pay(); t.displayInfo(); SaleManager sm("li si"); sm.setMonthlyPay(7000); sm.setSales(1000); sm.pay(); sm.displayInfo(); int c; cin >> c; return 0; }
View Code
相关文章推荐
- C++面向对象程序设计的一些知识点(4)
- C++面向对象程序设计的一些知识点(5)
- C++面向对象程序设计的一些知识点(1)
- C++面向对象程序设计的一些知识点(3)
- js中一些小知识点总结--持续更新
- 关于java的一些相关知识点
- 一些有用的小知识点
- C语言一些知识点回顾
- android的一些小知识点
- php中一些知识点(老师不会教哦)
- 我们老师说的一些简单知识点
- 一些小知识点
- CAAnimation动画的一些知识点
- Java基础知识点记录(主要记录一些不常见或者容易忘记的知识点,时刻更新)
- Android开发一些重要知识点_1
- MySQL 一些让人容易忽视的知识点
- 关于Fragment的一些知识点
- html5中的一些小知识点(CSS)
- Activity启动过程的一些知识点
- PHP中最容易忘记的一些知识点总结