类是自定义数据类型,是C语言的结构体进化而成的
对象是类实例化出的,用数据类型定义一个变量
#define _CRT_SECURE_NO_WARNINGS
#include
using namespace std;
class Maker //这个是类
{
public:
int a;//成员属性(成员变量)
void func()//成员方法(成员函数)
{
cout << "func" << endl;
}
};
int main()
{
Maker m; //m就是对象
system("pause");
return EXIT_SUCCESS;
}
C和C++中struct区别:
C语言struct只有变量
C++语言struct既有变量,也有函数
1、为什么要有封装?
封装是把属性(变量)和方法(函数)封装到类内,然后给这些数据赋予权限,防止乱调用函数和变量,出现错误,维护代码更方便
//类外不能访问私有权限的成员
//类外可以访问公有权限的成员
//类外不能访问保存权限的成员
//子类的类内可以访问父类的保护权限的成员 不能访问私有权限的成员
//类内是没有权限之分的
#define _CRT_SECURE_NO_WARNINGS
#include
using namespace std;
#include
//封装:1、把属性和方法放到类中,给这些数据赋予权限
//类内
class Maker
{
public://公有权限
void set(string Name,int Id)
{
id = Id;
name = Name;
}
void printMaker()
{
cout << "id=" << id << endl << "name=" << name << endl;
}
void get()
{
cout << "Maker a=" << a << endl;
}
private://私有权限
int id;
string name;
protected://保护权限
int a;
};
//继承 公有继承
class Son :public Maker
{
public:
void func()
{
//下面的a是从父类复制过来的
a = 20;//子类的类内可以访问父类的保护权限的成员
//id = 1;//err
}
void getS()
{
cout << "Son a=" << a << endl;
}
};
void test02()
{
Maker m;
Son s;
s.func();
m.get();
s.getS();
}
//类外不能访问私有权限的成员
//类外可以访问公有权限的成员
//类外不能访问保存权限的成员
//子类的类内可以访问父类的保护权限的成员 不能访问私有权限的成员
//类内是没有权限之分的
void test01()
{
Maker m;
m.set("露琪亚", 1);
m.printMaker();
}
int main()
{
test01();
test02();
system("pause");
return EXIT_SUCCESS;
}
#define _CRT_SECURE_NO_WARNINGS
#include
using namespace std;
#include
class Maker
{
public:
//写
void setName(string Name)
{
name = Name;
}
//读
string getName()
{
return name;
}
//写
void setAge(int Age)
{
//可以保护属性的合法性
if (Age > 0 && Age < 120)
{
age = Age;
}
}
//读
int getId()
{
return id;
}
private:
string name;
int age;
int id;
};
int main()
{
system("pause");
return EXIT_SUCCESS;
}
尽量把属性设置为私有权限
1、可以控制属性的读写权限
2、可赋予客户端访问数据的一致性
3、可以保护属性的合法性
#define _CRT_SECURE_NO_WARNINGS
#include
using namespace std;
#include
class Maker
{
public:
void Init()
{
name = "露琪亚";
age = 18;
}
//set get方法
void setN(string mName)
{
name = mName;
}
string getN()
{
return name;
}
void setA(int mAge)
{
if (mAge >= 0 && mAge <= 100)
{
age = mAge;
}
}
int getA()
{
return age;
}
//打印方法
void printMaker()
{
cout << "name: " << name << " age: " << age << endl;
}
private:
string name;
int age;
};
int main()
{
Maker m;
m.Init();
m.printMaker();
m.setN("一护");
m.setA(30);
m.printMaker();
cout << "name:" << m.getN() << " age:" << m.getA() << endl;
m.getA();
system("pause");
return EXIT_SUCCESS;
}
//结构体的默认权限是公有的
//类的默认权限是私有的
#define _CRT_SECURE_NO_WARNINGS
#include
using namespace std;
//结构体的默认权限是公有的
//类的默认权限是私有的
//结构体
struct Maker1
{
int a;
void func()
{
}
public:
int b;
};
//类
class Maker2
{
int a;
void func()
{
}
public:
int b;
};
//继承
struct SonMaker1 :public Maker1
{
};
class SonMaker2 :public Maker2
{
};
int main()
{
Maker1 m1;
Maker2 m2;
m1.b;
m2.b;
m1.a;
//m2.a;err
system("pause");
return EXIT_SUCCESS;
}
#define _CRT_SECURE_NO_WARNINGS
#include
#include //c++字符串
using namespace std;
//自定义的数据类型
//设置圆的类
class Circle
{
//个人习惯 方法和属性写在不同的共有权限
public:
//设置半径的长度
void setR(double r)
{
mR = r;
}
//计算圆的周长
double getL()
{
return 2 * 3.14*mR;
}
public://共有权限
double mR;//成员变量,成员属性
};
void test01()
{
//数据类型定义变量
//类实例化对象
Circle c;
c.setR(100);
cout << "圆的周长=" << c.getL() << endl;
}
void test02()
{
//字符串的操作
const char *p = "hello";
char buf[100] = "hello";
cout << buf << endl;
string str = "world";
cout << str << endl;
}
int main()
{
test01();
test02();
system("pause");
return EXIT_SUCCESS;
}
#define _CRT_SECURE_NO_WARNINGS
#include
using namespace std;
#include
class Student
{
public://公有
void setName(string Name)//成员方法 成员函数
{
name = Name;
}
void setId(int Id)
{
id = Id;
}
void myprint()
{
cout << "姓名:" << name << "\n学号" << id << endl;
}
private://私有权限
string name;//成员属性
int id;//成员属性
};
int main()
{
Student s;
s.setName("卡卡罗特");
s.setId(1);
s.myprint();
system("pause");
return EXIT_SUCCESS;
}
#define _CRT_SECURE_NO_WARNINGS
#include
using namespace std;
#include
class Car
{
public:
void init()
{
type = "BMW";
Size = 5;
Color = "白色";
}
void printCar()
{
cout << "品牌:" << type << " 大小:" << Size << endl;
}
private:
string type;
int Size;
string Color;
};
class SonCar :public Car
{
public:
//写
void setType(string Type)
{
type = Type;
}
void setMyT(int t)
{
MyT = t;
}
void setMynum(int num)
{
Mynum = num;
}
//读
string getT()
{
return type;
}
int getMyT()
{
return MyT;
}
int getMynum()
{
return Mynum;
}
void printConSar()
{
cout << "品牌:" << type << " 吨位:" << MyT << " 轮子个数:" << Mynum << endl;
Car::init();
Car::printCar();
}
private:
string type;
int MyT;
int Mynum;
};
void test01()
{
Car c;
c.init();
c.printCar();
}
void test02()
{
SonCar sc;
sc.setType("玛莎拉蒂");
sc.setMyT(20);
sc.setMynum(8);
sc.printConSar();
}
int main()
{
//test01();
test02();
system("pause");
return EXIT_SUCCESS;
}
#define _CRT_SECURE_NO_WARNINGS
#include
using namespace std;
class Cube
{
public:
//初始化变量
void init()
{
mL = 0;
mW = 0;
mH = 0;
}
//set
void setL(int l)
{
mL = l;
}
void setW(int w)
{
mW = w;
}
void setH(int h)
{
mH = h;
}
//get
int getL()
{
return mL;
}
int getW()
{
return mW;
}
int getH()
{
return mH;
}
//求立方体的面积
int caculateS()
{
return 2 * mL*mW + 2 * mL*mH + 2 * mW*mH;
}
//求立方体的体积
int calculateV()
{
return mL * mH * mW;
}
//成员函数比较立方体
//这里在类里进行的 因此只需要传一个参数就行了
bool CompareCube(Cube &cube)
{
if ( getL() == cube.getL() && getW()== cube.getW() && getH() == cube.getH() )
{
return true;
}
else
{
return false;
}
}
private:
int mL;
int mW;
int mH;
};
bool IsCompareCube(Cube &c1,Cube &c2)
{
if (c1.getH()==c2.getH() && c1.getW() == c2.getW() && c1.getL() == c2.getL())
{
return true;
}
else
{
return false;
}
}
int main()
{
Cube c1, c2;
//初始化对象
c1.init();
c2.init();
//设置立方体的长宽高
c1.setL(10);
c1.setW(20);
c1.setH(30);
c2.setL(10);
c2.setW(20);
c2.setH(30);
if (c1.CompareCube(c2))
{
cout << "两个立方体相等" << endl;
}
else
{
cout << "两个立方体不相等" << endl;
}
if (IsCompareCube(c1,c2))
{
cout << "两个立方体相等" << endl;
}
else
{
cout << "两个立方体不相等" << endl;
}
system("pause");
return EXIT_SUCCESS;
}
#pragma once
#include "Point.h"
#include //数据公式的库
#include
using namespace std;
class Circle
{
public:
void SetR(int r);
void SetHear(Point &p);
void SetHear(int x, int y);
int getR();
Point getHear();
//判断点和圆的关系
void isPointAndCircle(Point &p);
private:
int mR;//半径
Point mHear;//圆心
};
Point.h
#pragma once
class Point
{
public:
void setX(int x);
void setY(int y);
int getX();
int getY();
private:
int mX;
int mY;
};
Point.c
#include "Point.h"
void Point::setX(int x)
{
mX = x;
}
void Point::setY(int y)
{
mY = y;
}
int Point::getX()
{
return mX;
}
int Point::getY()
{
return mY;
}
Circle.c
#include "Circle.h"
void Circle::SetR(int r)
{
mR = r;
}
void Circle::SetHear(Point &p)
{
mHear.setX(p.getX());
mHear.setY(p.getY());
}
void Circle::SetHear(int x, int y)
{
mHear.setX(x);
mHear.setY(y);
}
int Circle::getR()
{
return mR;
}
Point Circle::getHear()
{
return mHear;
}
//判断点和圆的关系
void Circle::isPointAndCircle(Point &p)
{
//获取圆心和点之间的距离的平方
double distance = pow((p.getX() - mHear.getX()), 2) + pow((p.getY() - mHear.getY()), 2);
//半径的平方
double tmpR = pow(mR, 2);
//
if (distance>tmpR)
{
cout << "点在圆外" << endl;
}
else if (distance == tmpR)
{
cout << "点在圆上" << endl;
}
else
{
cout << "点在圆内" << endl;
}
}
30 点和圆的案例.cpp
#include "Circle.h"
void Circle::SetR(int r)
{
mR = r;
}
void Circle::SetHear(Point &p)
{
mHear.setX(p.getX());
mHear.setY(p.getY());
}
void Circle::SetHear(int x, int y)
{
mHear.setX(x);
mHear.setY(y);
}
int Circle::getR()
{
return mR;
}
Point Circle::getHear()
{
return mHear;
}
//判断点和圆的关系
void Circle::isPointAndCircle(Point &p)
{
//获取圆心和点之间的距离的平方
double distance = pow((p.getX() - mHear.getX()), 2) + pow((p.getY() - mHear.getY()), 2);
//半径的平方
double tmpR = pow(mR, 2);
//
if (distance>tmpR)
{
cout << "点在圆外" << endl;
}
else if (distance == tmpR)
{
cout << "点在圆上" << endl;
}
else
{
cout << "点在圆内" << endl;
}
}