2021-04-28

 

c++类&对象:

类中的数据和方法称为类的成员,例如函数在一个类中被称为类的成员。

类的定义:

类的定义是以关键字class开头,后跟类的名称。类的主体是包含在一对花括号中;关键字public确定了成员的访问属性,在类作用对象域内,公共成员在类的外部是可访问的,类的成员访问属性还可为private或protected。

说明:

1.公共权限 public          成员类内可以访问 类外也可以访问;

2.保护权限 protected    成员类内可以访问  类外不可以访问 ;子类可以访问父类中的保护内容(继承)

3.私有权限 private       成员类内可以访问  类外不可以访问 ;子类不可以访问父类中的私有内容(继承)

4.class和struct的区别:默认权限不同,calss默认的是私有权限,而public默认的是公共权限;

类对象:声明类的对象,就像声明基本类型的变量一样。

Box Box1;          // 声明 Box1,类型为 Box
Box Box2;          // 声明 Box2,类型为 Box

访问数据成员:类的对象的公共数据成员可以使用直接成员访问运算符 . 来访问

#include <iostream>
 
using namespace std;//iostream是指iostream库。iostream的意思是输入输出流,直接点说就是in(输入) out(输出) stream(流),取in、out的首字母与stream合成
 
class Box
{
   public:
      double length;   // 长度
      double breadth;  // 宽度
      double height;   // 高度
      // 成员函数声明
      double get(void);
      void set( double len, double bre, double hei );
};
// 成员函数定义
double Box::get(void) //“::”作用域限定符
{
    return length * breadth * height;
}
 
void Box::set( double len, double bre, double hei)
{
    length = len;
    breadth = bre;
    height = hei;
}
int main( )
{
   Box Box1;        // 声明 Box1,类型为 Box
   Box Box2;        // 声明 Box2,类型为 Box
   Box Box3;        // 声明 Box3,类型为 Box
   double volume = 0.0;     // 用于存储体积
 
   // box 1 详述
   Box1.height = 5.0; 
   Box1.length = 6.0; 
   Box1.breadth = 7.0;
 
   // box 2 详述
   Box2.height = 10.0;
   Box2.length = 12.0;
   Box2.breadth = 13.0;
 
   // box 1 的体积
   volume = Box1.height * Box1.length * Box1.breadth;
   cout << "Box1 的体积:" << volume <<endl;//endl=endline
 
   // box 2 的体积
   volume = Box2.height * Box2.length * Box2.breadth;
   cout << "Box2 的体积:" << volume <<endl;
 
 
   // box 3 详述
   Box3.set(16.0, 8.0, 12.0); 
   volume = Box3.get(); 
   cout << "Box3 的体积:" << volume <<endl;
   return 0;
}
运行结果:
Box1 的体积:210
Box2 的体积:1560
Box3 的体积:1536说明:1.私有成员和受保护的成员不能使用直接成员访问运算符(.)来直接访问。“::”作用域限定符

用作用域限定符声明函数是那个类的,在作用域运算符的前面没有类名,或者函数名前面既无类名又无作用域限定符,则表示函数不属于任何类,这个函数不是成员函数,是全局函数。

2.C++在类体中直接定义函数时,不需要在函数名前面加上类名,但成员函数在类外定义时,必须在函数名前面加上类名;

3.类函数必须先在类体中作原形声明,然后在类外面定义,类体的位置应在函数定义之前;

以下是练习案例:

1

#include<iostream>
using namespace std;
const double PI=3.14;
//设计一个圆类,求周长? 
class Circle
{ 
   //访问权限
public: 
  //属性 
  int r;//半径 
  //行为 (获取圆的周长)
  double calculateZC()
  {
     return 2*PI*r;
   } 
  
   
};

int main()
{
	//通过圆类来具体创建圆(对象),实例化。
	Circle c1;
	c1.r=2;
	cout<<"圆的周长为:"<<c1.calculateZC()<<endl;
	system("pause");
	return 0;
	
}
运行结果:
圆的周长为:12.56
请按任意键继续. . .

2.

//设计一个学生类,属性有学号和姓名,可以赋值和显示; 
#include<iostream>
using namespace std;
class Student
{
	//访问权限
	public:
	//属性
	int stu_id;
    string  name;
	//行为 添加并获取学生信息
	 void ShowStudent()
	 {
	 	cout<<"学号:"<<stu_id<<"姓名:"<<name<<endl;
	 }
	 void setStu_id(int id)
	 {
	 	stu_id=id;
	  } 
	 
};

int main()
{
  //实例化 1
  Student s1;
  s1.stu_id =19;
  s1.name="xiaoming";
  s1.ShowStudent();
  //2
  Student s2;
  s2.name="xiaoxiao";
  s2.setStu_id(18);
 // s2.stu_id =18;
  s2.ShowStudent();
  
  system("pause");
  return 0;
}
运行结果:
学号:19姓名:xiaoming
学号:18姓名:xiaoxiao
请按任意键继续. . .

C++继承:继承允许依据另一个类来定义一个类

当创建一个类时,不需要重新编写新的数据成员和成员函数,只需指定新建的类继承了一个已有的类的成员即可,称为基类,新建的类称为派生类   如;(狗即具有动物的共性,又有自身特性)。如图:

继承的好处:可以减少代码的重复

派生类的成员,包含两部分:

一类是从基类继承过来的,一类是自己添加的成员。

从基类继承过来的表现共性,而新增的成员表现为其个性。

练习案例:

#include<iostream>
using namespace std;

class Basepage
{
	//访问权限 
public:
	//属性
	//行为 
	void header()
	{
		cout<<"首页、公开课、登录、注册....(公共头部)"<<endl;
		
	}
	void footer()
	{
		cout<<"帮助中心、交流合作、站内地图...(公共底部)"<<endl;
	}
	void left()
	{
	    cout<<"java、c++、python...(公共分类)"<<endl;  
	}
};
//class Python
//{
	访问权限
//public:
//    void header()
//	{
//		cout<<"首页、公开课、登录、注册....(公共头部)"<<endl;
//		
//		}  
//	void footer()
//	{
//		cout<<"帮助中心、交流合作、站内地图...(公共底部)"<<endl;
//	 
//	  }
//	void left()
//	{
//	    cout<<"java、c++、python...(公共分类)"<<endl;  
//	}
//	void content()
//	{
//		cout<<"Python的视频"<<endl;
//	  }  
//}; 
class Python:public Basepage
{
public:
	void content()
	{
		cout<<"python学科视频"<<endl; 
	}
	
};
void Showpassage()
{
//	//实例化
//	cout<<"这是Java页面"<<endl;
//	Java  ja;
//	ja.header();
//	ja.footer();
//	ja.left();
//	ja.content();
	cout<<"这是python的页面"<<endl; 
	Python py;
	py.header();
	py.footer();
	py.left();
	py.content();
}

int main()
{
	Showpassage();
	return 0;
}
运行结果:
这是python的页面
首页、公开课、登录、注册....(公共头部)
帮助中心、交流合作、站内地图...(公共底部)
java、c++、python...(公共分类)
python学科视频

--------------------------------
Process exited after 0.2872 seconds with return value 0
请按任意键继续. . .

c++重载运算符和重载函数:C++ 允许在同一作用域中的某个函数运算符指定多个定义,分别称为函数重载运算符重载

在同一个作用域内,可以声明几个功能类似的同名函数,但是这些同名函数的形式参数(指参数的个数、类型或者顺序)必须不同。

#include<iostream>
using namespace std;

class student
{
	public:
		void name(string a)
		{
			cout<<"姓名为:"<<a<<endl;
			
		}
		void sex(string c)
		{
			cout<<"性别为:"<<c<<endl;
		}
		
		void stu_id(int b)
		{
			cout<<"学号:"<<b<<endl;
		}
		
 } ;
 
int main()
 {
    student stu;
    stu.name("小红");
	stu.stu_id(36);
	stu.sex("女");
	return 0;
	  
 }
运行结果:
姓名为:小红
学号:36
性别为:女

--------------------------------

运算重载 :

重定义或重载大部分 C++ 内置的运算符,重载的运算符是带有特殊名称的函数,函数名是由关键字 operator 和其后要重载的运算符符号构成的。与其他函数一样,重载运算符有一个返回类型和一个参数列表

Person operator+ (Person &p) ;
Person operator+ (Person &p1,Person &p2);
#include <iostream>
using namespace std;
 
class Box
{
   public:
 
      double getVolume(void)
      {
         return length * breadth * height;
      }
      void setLength( double len )
      {
          length = len;
      }
 
      void setBreadth( double bre )
      {
          breadth = bre;
      }
 
      void setHeight( double hei )
      {
          height = hei;
      }
      // 重载 + 运算符,用于把两个 Box 对象相加
      Box operator+(const Box& b)
      {
         Box box;
         box.length = this->length + b.length;
         box.breadth = this->breadth + b.breadth;
         box.height = this->height + b.height;
         return box;
      }
   private:
      double length;      // 长度
      double breadth;     // 宽度
      double height;      // 高度
};
// 程序的主函数
int main( )
{
   Box Box1;                // 声明 Box1,类型为 Box
   Box Box2;                // 声明 Box2,类型为 Box
   Box Box3;                // 声明 Box3,类型为 Box
   double volume = 0.0;     // 把体积存储在该变量中
 
   // Box1 详述
   Box1.setLength(6.0); 
   Box1.setBreadth(7.0); 
   Box1.setHeight(5.0);
 
   // Box2 详述
   Box2.setLength(12.0); 
   Box2.setBreadth(13.0); 
   Box2.setHeight(10.0);
 
   // Box1 的体积
   volume = Box1.getVolume();
   cout << "Volume of Box1 : " << volume <<endl;
 
   // Box2 的体积
   volume = Box2.getVolume();
   cout << "Volume of Box2 : " << volume <<endl;
 
   // 把两个对象相加,得到 Box3
   Box3 = Box1 + Box2;
 
   // Box3 的体积
   volume = Box3.getVolume();
   cout << "Volume of Box3 : " << volume <<endl;
 
   return 0;
}

运行结果:
Volume of Box1 : 210
Volume of Box2 : 1560
Volume of Box3 : 5400

C++ 多态:

多种状态,当类之间存在层次结构,并且类之间是通过继承关联时,就会用到多态。

C++ 多态意味着调用成员函数时,会根据调用函数的对象的类型来执行不同的函数。

多态分为两类:

  1. 静态多态:函数重载和运算重载属于静态多态,复用函数名。
  2. 动态多态:派生类和虚函数实现运行时多态。

两者区别:

静态多态的函数地址早绑定-编译阶段确定函数地址;

动态多态的函数地址晚绑定-运行阶段确定函数地址;

多态满足条件:

  1. 有继承关系
  2. 子类重写父类中的函数;

实例:

#include <iostream> 
using namespace std;
 
class Shape {
   protected:
      int width, height;
   public:
      Shape( int a=0, int b=0)
      {
         width = a;
         height = b;
      }
      int area()
      {
         cout << "Parent class area :" <<endl;
         return 0;
      }
};
class Rectangle: public Shape{
   public:
      Rectangle( int a=0, int b=0):Shape(a, b) { }
      int area ()
      { 
         cout << "Rectangle class area :" <<endl;
         return (width * height); 
      }
};
class Triangle: public Shape{
   public:
      Triangle( int a=0, int b=0):Shape(a, b) { }
      int area ()
      { 
         cout << "Triangle class area :" <<endl;
         return (width * height / 2); 
      }
};
// 程序的主函数
int main( )
{
   Shape *shape;
   Rectangle rec(10,7);
   Triangle  tri(10,5);
 
   // 存储矩形的地址
   shape = &rec;
   // 调用矩形的求面积函数 area
   shape->area();
 
   // 存储三角形的地址
   shape = &tri;
   // 调用三角形的求面积函数 area
   shape->area();
   
   return 0;
}

运行结果:
Parent class area
Parent class area

对程序稍作修改,在 Shape 类中,area() 的声明前放置关键字 virtual

class Shape {
   protected:
      int width, height;
   public:
      Shape( int a=0, int b=0)
      {
         width = a;
         height = b;
      }
      virtual int area()
      {
         cout << "Parent class area :" <<endl;
         return 0;
      }
};

修改后运行结果:

Rectangle class area
Triangle class area

虚函数:

是在基类中使用关键字 virtual 声明的函数。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值