c++面向对象类02
来源:互联网 发布:移动端ui框架 知乎 编辑:程序博客网 时间:2024/05/22 14:05
salary(doubble wage,string id,string name):wage(wage),employee(id,name) salary中包含employee类的初始化。
派生类与基类的构造顺序是先基类再派生,析构顺序是相反的。
多继承下的派生类构造函数必须同时负责该派生类的所有基类构造函数的参数传递。且构造函数和析构函数的调用顺序和单继承是一样的(可参考C++之继承与派生(2) ),先调用基类构造函数,再调用对象成员的构造函数,最后调用派生类的构造函数。那么处于同一层次的各个基类构造函数的调用顺序是取决于声明派生类时所指定的各个基类的顺序。
虚基类,基类是a,b,c都继承a,d继承b,c 现在a里面有一个name的变量,这样实例化d,就有两个name副本,造成二义性,为了解决这个问题,引入虚基类public virtual,只有基类的一个拷贝,去掉了二义性。
运算符重载,实现各种类型运算符应用到自定义类型
#include "stdafx.h"#include <iostream>class Complex //复数类{public:double real;//实数double imag;//虚数 Complex(double real=0,double imag=0) {this->real=real;this->imag=imag; }};Complex operator+(Complex com1,Complex com2)//运算符重载函数{return Complex(com1.real+com2.real,com1.imag+com2.imag);}int main(){ Complex com1(10,10),com2(20,20),sum; sum=com1+com2;//或sum=operator+(com1,com2) std::cout<<"sum的实数部分为"<<sum.real<<std::endl; std::cout<<"sum的虚数部分为"<<sum.imag<<"i"<<std::endl;return0;}
运算符重载函数是不属于任何的类,是全局的函数,重载函数可以访问类中的public成员变量,如果成员变量是私有的,那么就要在类中声明重载运算符函数是友元函数。 friend Complex operator+(Complex com1,Complex com2);//友元函数重载双目运算符+
对于成员函数重载运算符而言,双目运算符的参数表中仅有一个参数,而单目则无参数。同样的是重载,为什么和友元函数在参数的个数上会有所区别的。原因在于友元函数,没有this指针。
1.在C++里编译器是根据运算符重载函数参数表里是否插入关键字int来区分前置还是后置运算。比如:
1 #include "stdafx.h"
2 #include <iostream>
3
4 class TDPoint//三维坐标
5 {
6 private:
7 int x;
8 int y;
9 int z;
10 public:
11 TDPoint(int x=0,int y=0,int z=0)
12 {
13 this->x=x;
14 this->y=y;
15 this->z=z;
16 }
17 TDPoint operator++();//成员函数重载前置运算符++
18 TDPoint operator++(int);//成员函数重载后置运算符++
19 friend TDPoint operator++(TDPoint& point);//友元函数重载前置运算符++
20 friend TDPoint operator++(TDPoint& point,int);//友元函数重载后置运算符++
21 void showPoint();
22 };
23
24 TDPoint TDPoint::operator++()
25 {
26 ++this->x;
27 ++this->y;
28 ++this->z;
29 return*this;//返回自增后的对象
30 }
31
32 TDPoint TDPoint::operator++(int)
33 {
34 TDPoint point(*this);
35 this->x++;
36 this->y++;
37 this->z++;
38 return point;//返回自增前的对象
39 }
40
41 TDPoint operator++(TDPoint& point)
42 {
43 ++point.x;
44 ++point.y;
45 ++point.z;
46 return point;//返回自增后的对象
47 }
48
49 TDPoint operator++(TDPoint& point,int)
50 {
51 TDPoint point1(point);
52 point.x++;
53 point.y++;
54 point.z++;
55 return point1;//返回自增前的对象
56 }
57
58 void TDPoint::showPoint()
59 {
60 std::cout<<"("<<x<<","<<y<<","<<z<<")"<<std::endl;
61 }
62
63 int main()
64 {
65 TDPoint point(1,1,1);
66 point.operator++();//或++point
67 point.showPoint();//前置++运算结果
68
69 point=point.operator++(0);//或point=point++
70 point.showPoint();//后置++运算结果
71
72 operator++(point);//或++point;
73 point.showPoint();//前置++运算结果
74
75 point=operator++(point,0);//或point=point++;
76 point.showPoint();//后置++运算结果
77
78 return0;
79 }
com+1.5 两个方式实现相加,第一个就是重载+运算符,第二个是转化构造函数。(虚部是0)
C++的异常处理机制有3部分组成:try(检查),throw(抛出),catch(捕获)。把需要检查的语句放在try模块中,检查语句发生错误,throw抛出异常,发出错误信息,由catch来捕获异常信息,并加以处理。一般throw抛出的异常要和catch所捕获的异常类型所匹配。异常处理的一般格式为:
try
{
被检查语句
throw 异常
}
catch(异常类型1)
{
进行异常处理的语句1
}
catch(异常类型2)
{
进行异常处理的语句2
}
- c++-面向对象类
- C语言面向对象-类
- C#-面向对象思想-类-Car---ShinePans
- Objective-C 面向对象基础-类
- Objective-C 面向对象(类II)
- c语言编写面向对象的类
- C++(1)面向对象和类
- C/C++类与面向对象
- C与面向对象
- C 面向对象程序设计
- c实现面向对象
- Obj-c面向对象
- JAVA面向对象C
- c面向对象设计
- c++-->面向对象
- 面向对象(C++)
- [C#] 面向对象
- c#-面向对象
- NYOJ 237 游戏高手的烦恼 最小点集覆盖 = 二分图最大匹配
- login4j
- 哈希表的解释
- Junit的使用方法
- Linux时间操作(time、gettimeofday)
- c++面向对象类02
- Eclipse配置GitHub代码库(以Windows7为例)
- java多线程:线程同步(二)
- ESXi物理机内的虚拟机文件如何导出?
- 初识Hadoop——Hadoop-1.2.1和Hadoop-2.7.1的配置以及常见问题分析
- 3分钟制作一个APP,六款国际热门互联网产品
- CvvImage CopyOf 问题!!
- 虚拟机类加载机制
- UI 18 UICollectionView