标签:
面向对象(Object-Oriented):是一种按照人们认识客观世界的思维方式,采用基于对象(实体)的概念建立抽象的模型,模拟客观世界分析、设计、实现软件的方法。
类(Class):具有相同属性、操作的抽象的集合。
类包括成员变量和成员函数,其具有3种属性公有(public)、私有(private)和保护(protected)。
public:可以被该类的函数、子类的函数、友元函数访问,也可以被该类的对象访问。
private:只能被该类中的函数访问,被友元函数访问;不能被任何其他访问,该类的对象也不能访问。
protected:可以被该类的函数、子类的函数、友元函数访问。不能被该类的对象访问。
创建类时要对类进行声明和定义。
构造函数(Constructors):是一种特殊的成员函数。主要用来在创建对象时初始化对象。构造函数唯一的语法限制是不能指定返回类型。构造函数名与类名同名。构造函数包括默认构造函数、拷贝构造函数。
默认构造函数(Default Constructor):在类未提供显式打的初始化值时,被用来创建对象的构造函数,默认构造函数无参数。当且仅当没有定义任何构造函数时,编译器才会提供默认的构造函数,为类定义了构造函数(有参数)后,则必须为它提供显式默认的构造函数。给已有的构造函数的所有参数提供默认值。
1 #ifndef _Number_H_ 2 #define _Number_H_ 3 4 class Number 5 { 6 public: 7 Number(int a = 0, double b = 0.0); 8 //Number(int, double); 9 //Number(); 10 void ShowNumber(); 11 private: 12 int Number_a; 13 double Number_b; 14 }; 15 16 #endif
1 #include <stdio.h> 2 #include "Number.h" 3 4 Number::Number(int a, double b) 5 { 6 Number_a = a; 7 Number_b = b; 8 } 9 10 //Number::Number() 11 //{ 12 // Number_a = 0; 13 // Number_b = 0.0; 14 //} 15 16 void Number::ShowNumber() 17 { 18 printf("a = %-10d, b = %lf\n", Number_a, Number_b); 19 }
1 #include "Number.h" 2 3 int main() 4 { 5 Number a(1, 1.1); 6 Number b; 7 a.ShowNumber(); 8 b.ShowNumber(); 9 return 0; 10 }
0 errors, 0 warnings a = 1 , b = 1.100000 a = 0 , b = 0.000000
通过重载来定义另一个构造函数。
1 #ifndef _Number_H_ 2 #define _Number_H_ 3 4 class Number 5 { 6 public: 7 //Number(int a = 0, double b = 0.0); 8 Number(int, double); 9 Number(); 10 void ShowNumber(); 11 private: 12 int Number_a; 13 double Number_b; 14 }; 15 16 #endif
1 #include <stdio.h> 2 #include "Number.h" 3 4 Number::Number(int a, double b) 5 { 6 Number_a = a; 7 Number_b = b; 8 } 9 10 Number::Number() 11 { 12 Number_a = 0; 13 Number_b = 0.0; 14 } 15 16 void Number::ShowNumber() 17 { 18 printf("a = %-10d, b = %lf\n", Number_a, Number_b); 19 }
1 #include "Number.h" 2 3 int main() 4 { 5 Number a(1, 1.1); 6 Number b; 7 a.ShowNumber(); 8 b.ShowNumber(); 9 return 0; 10 }
0 errors, 0 warnings 2 a = 1 , b = 1.100000 3 a = 0 , b = 0.000000
拷贝构造函数(Copy Constructor):是一种特殊的构造函数,它由编译器调用来完成一些基于同一类的其他对象的构建及初始化。
拷贝构造函数是由普通构造函数和赋值操作符共同实现的。
如果在类中没有显式的声明一个拷贝构造函数,那么,编译器会自动生成一个来进行对象之间非static成员的位拷贝。这个隐含的拷贝构造函数简单的关联了所有的类成员。
在C++中,下面三种对象需要调用拷贝构造函数:
1 #ifndef _Number_H_ 2 #define _Number_H_ 3 4 class Number 5 { 6 public: 7 //Number(int a = 0, double b = 0.0); 8 Number(int, double); 9 Number(); 10 Number(const Number &); 11 void ShowNumber(); 12 private: 13 int Number_a; 14 double Number_b; 15 }; 16 17 #endif
1 #include <stdio.h> 2 #include "Number.h" 3 4 Number::Number(int a, double b) 5 { 6 Number_a = a; 7 Number_b = b; 8 } 9 10 Number::Number() 11 { 12 Number_a = 0; 13 Number_b = 0.0; 14 } 15 16 Number::Number(const Number & num) 17 { 18 Number_a = num.Number_a; 19 Number_b = num.Number_b; 20 } 21 22 void Number::ShowNumber() 23 { 24 printf("a = %-10d, b = %lf\n", Number_a, Number_b); 25 }
1 #include "Number.h" 2 3 int main() 4 { 5 Number a(1, 1.1); 6 Number b(a); 7 a.ShowNumber(); 8 b.ShowNumber(); 9 return 0; 10 }
0 errors, 0 warnings a = 1 , b = 1.100000 a = 1 , b = 1.100000
析构函数(Destructor):也是一种特殊的成员函数,它的作用与构造函数相反,当对象脱离其作用域时(例如对象所在的函数已经调用完毕),系统自动执行析构函数。
析构函数名也应与类名相同,只是在函数名前加一个取反符"~",以区别于构造函数。
标签:
原文地址:http://www.cnblogs.com/blank031x/p/4701965.html