【C++】——类与对象(二)

简介: 【C++】——类与对象(二)

🎯第一题:

现有一学生类定义, 分别实现类的构造函数、拷贝构造函数(深拷贝)、析构函数及显示函数;分别用构造函数及拷贝构造函数创建对象,并输出对象信息。效果如图:

🎯 第二题:

声明一个Student类,在该类中包括数据成员name(姓名),score(分数)、两个静态数据成员total_score(总分)和count(学生人数);一个静态成员函数average()用于求全班成绩的平均值。在main函数中,输入某班(3个)同学的姓名成绩,输出全班学生的成绩之和及平均分。效果如图:

686fc7e05f6a83fdb25ecb403c782549_3f408932d5ac49723a50ff8070b0acc4.png

🎯 第三题:

设计一个坐标系点类Point,友元函数dis计算给定两个坐标点的距离;在主程序中创建类Point的两个点对象p1和p2;计算两个点之间距离并输出。效果如图:


🎯 答案:

💻第一题:

#include <iostream>
 
#include <cstring>
 
using namespace std;
 
class Student {
 
 public:
 
 Student(int id,string name,char* addr);
 
 Student(const Student& other);
 
 ~Student();
 
 void show();
 
 private:
 
 int _id;
 
 string _name;
 
 char *_addr;
 
};
 
Student::Student(int id,string name,char* addr) {
 
 cout<<"调用构造函数"<<endl;
 
 _id=id;
 
_name=name;
 
int len =strlen(addr)+1;
 
_addr=new char[len];
 
memset(_addr,0,len);
 
strcpy(_addr,addr);
 
}
 
Student::Student(const Student& another) {
 
 cout<<"调用拷贝构造函数"<<endl;
 
_id=another._id;
 
_name=another._name;
 
int len=strlen(another._addr)+1;
 
_addr=new char[len];
 
strcpy(_addr,another._addr);
 
}
 
void Student::show() {
 
 cout<<_id<<" "<<_name<<" "<<_addr<<endl;
 
}
 
Student::~Student() {
 
 cout<<"调用析构函数"<<endl;
 
 if(_addr!=NULL)
 
 delete []_addr;
 
}
 
int main() {
 
 char *p = "beijing";
 
 Student stuA(123456,"zhangsan",p);
 
 cout<<"stuA:";
 
 stuA.show();
 
 Student stuB(stuA); //使用sheepA初始化新对象sheepB
 
 cout<<"stuB:";
 
 stuB.show();
 
 return 0;
 
}

💻第二题:

#include <iostream>
 
using namespace std;
 
class Student {
 
 public:
 
 Student(string _name,int _score);
 
 static float average();
 
 static float total_score;
 
 static int count;
 
 private:
 
 string name;
 
 float score;
 
};
 
Student::Student(string _name,int _score){
 
name=_name;
 
score=_score;
 
total_score+=score;
 
count++;
 
}
 
float Student::total_score=0.0;
 
int Student::count=0;
 
float Student::average(){
 
return (total_score/count);
 
}
 
int main() {
 
 string name;
 
 float score;
 
 cout<<"input name,socre:";
 
 cin>>name>>score;
 
 Student stu1(name,score);
 
 cout<<"input name,socre:";
 
 cin>>name>>score;
 
 Student stu2(name,score);
 
 cout<<"input name,socre:";
 
 cin>>name>>score;
 
 Student stu3(name,score);
 
 cout<<"total_socre:"<<Student::total_score<<",average:"<<Student::average()<<endl;
 
 return 0;
 
}

💻第三题:

#include <iostream>
 
#include <cmath>
 
using namespace std;
 
class Point {
 
 friend float dis(Point &p1,Point &p2);
 
 public:
 
 Point(float x,float y);
 
 ~Point();
 
 private:
 
 float _x;
 
 float _y;
 
};
 
Point::Point(float x=0,float y=0):_x(x),_y(y) {
 
 cout<<"初始化坐标点"<<endl;
 
}
 
Point::~Point() {}
 
float dis(Point &p1,Point &p2) {
 
float d=sqrt((p1._x-p2._x)*(p1._x-p2._x)+(p1._y-p2._y)*(p1._y-p2._y)); 
 
return d;
 
}
 
int main() {
 
 Point p1(5,5);
 
 Point p2(10,10);
 
 float distance=dis(p1,p2);
 
 cout<<"两点间距离是:"<<distance<<endl;
 
 return 0;
 
}
相关文章
|
2月前
|
存储 编译器 C语言
【c++丨STL】string类的使用
本文介绍了C++中`string`类的基本概念及其主要接口。`string`类在C++标准库中扮演着重要角色,它提供了比C语言中字符串处理函数更丰富、安全和便捷的功能。文章详细讲解了`string`类的构造函数、赋值运算符、容量管理接口、元素访问及遍历方法、字符串修改操作、字符串运算接口、常量成员和非成员函数等内容。通过实例演示了如何使用这些接口进行字符串的创建、修改、查找和比较等操作,帮助读者更好地理解和掌握`string`类的应用。
65 2
|
2月前
|
存储 编译器 C++
【c++】类和对象(下)(取地址运算符重载、深究构造函数、类型转换、static修饰成员、友元、内部类、匿名对象)
本文介绍了C++中类和对象的高级特性,包括取地址运算符重载、构造函数的初始化列表、类型转换、static修饰成员、友元、内部类及匿名对象等内容。文章详细解释了每个概念的使用方法和注意事项,帮助读者深入了解C++面向对象编程的核心机制。
116 5
|
2月前
|
存储 编译器 C++
【c++】类和对象(中)(构造函数、析构函数、拷贝构造、赋值重载)
本文深入探讨了C++类的默认成员函数,包括构造函数、析构函数、拷贝构造函数和赋值重载。构造函数用于对象的初始化,析构函数用于对象销毁时的资源清理,拷贝构造函数用于对象的拷贝,赋值重载用于已存在对象的赋值。文章详细介绍了每个函数的特点、使用方法及注意事项,并提供了代码示例。这些默认成员函数确保了资源的正确管理和对象状态的维护。
120 4
|
2月前
|
存储 编译器 Linux
【c++】类和对象(上)(类的定义格式、访问限定符、类域、类的实例化、对象的内存大小、this指针)
本文介绍了C++中的类和对象,包括类的概念、定义格式、访问限定符、类域、对象的创建及内存大小、以及this指针。通过示例代码详细解释了类的定义、成员函数和成员变量的作用,以及如何使用访问限定符控制成员的访问权限。此外,还讨论了对象的内存分配规则和this指针的使用场景,帮助读者深入理解面向对象编程的核心概念。
158 4
|
3月前
|
存储 编译器 对象存储
【C++打怪之路Lv5】-- 类和对象(下)
【C++打怪之路Lv5】-- 类和对象(下)
36 4
|
3月前
|
编译器 C语言 C++
【C++打怪之路Lv4】-- 类和对象(中)
【C++打怪之路Lv4】-- 类和对象(中)
34 4
|
3月前
|
存储 安全 C++
【C++打怪之路Lv8】-- string类
【C++打怪之路Lv8】-- string类
33 1
|
3月前
|
存储 编译器 C语言
【C++打怪之路Lv3】-- 类和对象(上)
【C++打怪之路Lv3】-- 类和对象(上)
24 0
|
3月前
|
存储 编译器 C++
【C++类和对象(下)】——我与C++的不解之缘(五)
【C++类和对象(下)】——我与C++的不解之缘(五)
|
3月前
|
编译器 C++
【C++类和对象(中)】—— 我与C++的不解之缘(四)
【C++类和对象(中)】—— 我与C++的不解之缘(四)