C++类

来源:互联网 发布:易碎贴纸淘宝 编辑:程序博客网 时间:2024/05/01 04:25

/*
*程序名称:CppClass
*程序描述:C++类
*编写时间:20121219
*/
#include <iostream>
#include <string>
using namespace std;

/**************************************************************************************
*面向对象编程(OOP)
*类:用户定义的数据类型 ,使用关键字class
* 1.在类中声明的变量和函数称为类的成员。变量称为数据成员, 函数称为成员函数。
* 2.定义一个类之后,就可以声明类类型的这是(类的实例),每个实例都是类的一个对象。
* 3.定义类的实例称为实例化。
* 4.在创建类是,已定义的所有成员在默认情况下都是隐藏的,无法从类的外部访问,称为类的私有成员,私有成员只能在该类的成员函数中访问
* 5.可以使用关键字public(后跟冒号)将类的成员声明为公用的,以便可以在外部访问。结构中的成员默认都是公用的。
* 6.构造函数:类的一种特殊的函数,在定义类的新实例时调用,可以在创建新对象进初始化它。如果类的定义中包含了构造函数,类的对象就不
*能用初始化列表创建类的对象,而必需使用构造函数来创建。
* 7.类的构造函数通常与包含它的类名相同,构造函数没有返回值和返回类型,
* 8.每个类至少有一个构造函数,类的对象总是用构造函数创建的,如果没有显式的为类定义构造函数,编译器会提供一个默认的构造函数。
* 9.默认构造函数没有参数,如果显式声明自己的构造函数,默认的构造函数被显式声明的构造函数覆盖。
* 10.成员函数在类中定义,默认初始值放在函数头中;如果类定义中只包含了函数的声明,默认参数初始值应该放在声明中。
* 11.构造函数的主要目的是确保对象的所有数据成员都设置为合适的值;
*
*
*封装:把数据成员和函数成员打包到对象中,就称为封装
* 1.数据隐藏:不允许直接访问对象的数据值 ;
* 2.数据成员表示对象的状态,操纵它们的成员函数表示对象与外界的接口; 
*继承:根据一个类型定义另一个类型的能力
*多态:不同的时刻有不同的形态
* 1.使用指针或引用调用对象的成员函数 ;
* 2.这种机制仅适合于派生于通用类型的对象;
* 3.多态性意味着,属于一级继承性相关的类的对象可以通过基类指针和引用来传送和操作
* 4.子类的对象通过基类的指针和引用来操作
* 5.通过指针调用的函数并不是在编译时确定的,而是在程序执行时确定的,同一个函数调用会根据指针指向的对象完成不同的操作
*
*this指针:当前对象的地址;
* 1.使用对象的指针时需要使用指针成员访问运算符(->);
* 2.在任何成员函数中,都会自动使用this指针来访问类的成员名;
* 3.如果把成员函数的返回类型指定为类类型的指针,可以从函数中返回this;
*
*const对象:
* 1.const类型的对象不允许修改,对象的数据成员值也不允许修改,相当于常量;
* 2.const对象只能调用声明为const的成员函数,const成员函数不会修改调用它的对象;
* 3.声明const函数需要在类定义中函数声明的最后加上关键字const;
*
*类对象的大小:使用sizeof运算符可以获得类对象的大小;

*类的静态成员:类的数据成员和成员函数可以声明为static

**************************************************************************************/

//类的定义跟结构基本相同,可以使用作用域修饰符,结尾要以分号结束
class Client{
 //作用域修饰符后面要回冒号,最后一个修改符将对其之后的成员变量和成员函数起作用
 public :
  string client_name;
 private :
  string mobile_phone;
 public :
  string client_address;
 //显示声明和定义默认的构造函数
 Client(){
  client_name = "空";  
  mobile_phone = "空"; 
  client_address = "空"; 
 };
 //Clientt和getClientInfo方法都将被声明成public类型的
 Client(string name,string phone,string address){
  client_name = name;
  mobile_phone = phone;
  client_address = address;
  cout << getClientInfo();
 }
 //内部声明,外部定义的构造函数
 Client(string name,string phone,string address,string flag);
 string getClientInfo(){
  return client_name + ":" + mobile_phone + ":" + client_address;
 }
//以分号结束 
};
//构造函数还中可以放在类的外部,使用   类名::类名(参数列表)  的形式
Client::Client(string name,string phone,string address,string flag){
 client_name = name;
 mobile_phone = phone;
 client_address = address;
 cout << flag + "\n";
 cout << getClientInfo(); 
}

int main(){
 //用构造函数初始化对象
 Client zhangsan("张三","18636663666","中国");
 cout << zhangsan.client_name;
 //不可以访问private类型的 mobile_phone
 //cout << zhangsan.mobile_phone;
 cout <<"\n";
 cout << zhangsan.getClientInfo();
 cout <<"\n";
 Client lisi("李四","18636663666","中国","使用内部声明外部定义的构造函数创建对象");
 cout <<"\n";
 //如果没有显示声明默认的构造函数,下面代码将编译不过,默认的构造函数被显式声明的构造函数覆盖
 Client wangwu; //此语句将调用显式声明的默认构造函数
 cout << wangwu.getClientInfo();  
 cout <<"\n";
 //创建对象lisi的副本对象全调用默认副本构造函数
 Client lisitwo(lisi);
 cout << lisitwo.client_name;
 cout <<"\n";
}

 

 

原创粉丝点击