C++学习笔记-day09
1、封装-设计案例-点和圆的关系
#include<iostream> using namespace std; //点和圆关系案例 // 点类 class Point { public: //设置x坐标 void setX(int x) { m_X = x; } //获取x坐标 int getX() { return m_X; } //设置y坐标 void setY(int y) { m_Y = y; } //获取y坐标 int getY() { return m_Y; } private: int m_X; int m_Y; }; //圆类 class Circle { public: //设置半径 void setR(int r) { m_R = r; } //获取半径 int getR() { return m_R; } //设置圆心 void setCenter(Point Center) { m_Center = Center; } //获取圆心 Point getCenter() { return m_Center; } private: int m_R; Point m_Center; }; //判断点和圆的关系 void isInCircle(Circle& c, Point& p) { //计算两点之间距离的平方 int distance = (c.getCenter().getX() - p.getX()) * (c.getCenter().getX() - p.getX()) + (c.getCenter().getY() - p.getY()) * (c.getCenter().getY() - p.getY()); //再计算半径的平方 int rDistance = c.getR() * c.getR(); //判断关系 if (distance == rDistance) { cout << "点在圆上" << endl; } else if (distance > rDistance) { cout << "点在圆外" << endl; } else { cout << "点在圆内" << endl; } } int main() { //创建圆 Circle C; C.setR(10); Point center; center.setX(10); center.setY(0); C.setCenter(center); //创建点 Point p; p.setX(10); p.setY(10); //判断二者的关系 isInCircle(C,p); system("pause"); return 0; }
2、对象的初始化和清理
构造函数的分类及调用
#include<iostream> using namespace std; //1构造函数的分类及调用 //分类 // 按照参数分类 无参构造(默认构造)和有参构造 // 按照类型分类 普通构造和拷贝构造 class Person { public: Person() { cout << "调用Person无参(默认)构造函数" << endl; } Person(int a) { age = a; cout << "调用Person有参构造函数" << endl; } //拷贝构造函数 Person(const Person &p) { //将传入人的所有属性拷贝到当前对象的身上 age = p.age; cout << "调用Person拷贝构造函数" << endl; } ~Person() { cout << "调用Person析构函数" << endl; } int age; }; //调用 void test01() { //1、括号法 //Person p1; // 默认构造函数调用 //Person p2(10); //有参构造函数 ////拷贝构造函数 //Person p3(p2); //注意事项 //调用默认构造函数的时候,不要加() //下面这行代码编译器会认为是函数的声明,不会认为在创建对象 // Person p4(); //cout << "p2的年龄" << p2.age << endl; //cout << "p3的年龄" << p3.age << endl; //2、显示法 Person p1; Person p2 = Person(10); //有参构造 Person p3 = Person(p2); //拷贝构造 //person(10) 匿名对象 特点:当前行执行结束后系统会立即回收掉匿名对象 //不要利用拷贝构造函数来初始化匿名对象 编译器会认为 Person(p3)==Person p3 //3、隐式转换法 Person p4 = 10; //有参构造 相当于写了 Person p4=Person(10); Person p5 = p4; //拷贝构造 } int main() { test01(); system("pause"); return 0; }
拷贝函数调用时机
#include<iostream> using namespace std; //拷贝函数调用时机 //1、使用一个创建完毕的对象来初始化一个新对象 //2、值传递的方式给函数参数传值 //3、值方式返回局部对象 class Person { public: Person() { cout << "Person默认构造函数调用" << endl; } Person(int age) { cout << "Person有参构造函数调用" << endl; m_Age = age; } Person(const Person& p) { cout << "Person拷贝构造函数调用" << endl; m_Age = p.m_Age; } ~Person() { cout << "Person析构函数调用" << endl; } int m_Age; }; //1、已经创建完毕的对象来创建新对象 void test01() { Person p1(20); Person p2(p1); cout << "p2的年龄是" << p2.m_Age << endl; } //2、值传递的方式给函数参数传值 void doWork(Person p) { } void test02() { Person p; doWork(p); } //值方式返回局部对象 Person dowork2() { Person p1; cout << (int*)&p1<<endl; return p1; } void test03() { Person p = dowork2(); cout << (int*)&p << endl; } int main() { //test01(); //test02(); test03(); system("pause"); return 0; }
作者:lq0710
-------------------------------------------
个性签名:独学而无友,则孤陋而寡闻。做一个灵魂有趣的人!
如果觉得这篇文章对你有小小的帮助的话,记得在右下角点个“推荐”哦,博主在此感谢!