成员函数特征(类中定义的数据成员和成员函数的两个概念谁能帮我理清楚一下,分别解释下以及两者区别)

本文目录
- 类中定义的数据成员和成员函数的两个概念谁能帮我理清楚一下,分别解释下以及两者区别
- 与一般成员函数比较,构造函数和析构函数有哪些特点
- c++类成员函数的重载,覆盖和隐藏有什么区别
- const成员函数有什么特点
- 成员函数的特点
- 什么是成员函数
类中定义的数据成员和成员函数的两个概念谁能帮我理清楚一下,分别解释下以及两者区别
数据成员是存储类都某些特征的,函数式实现某些功能的
比如一个定义一个图形类“Circle”,他有直径,圆心坐标等特征,这些就是该类的数据成员。现在我们要实现一个求圆的面积的功能,那么就需要定义一个函数,该函数返回了圆的面积。当然你也可以把面积当做数据成员,定义一个求直径的函数。
与一般成员函数比较,构造函数和析构函数有哪些特点
构造函数主要用来对成员初始化和分配空间,析构函数用于执行一些清理任务,如释放分配给对象的内存空间等。
构造函数有以下特点:
1.构造函数的名字必须与类名相同;
2.构造函数可以有任意类型的参数,但不能具有返回类型;
3.定义对象时,编译系统会自动地调用构造函数;
4.构造函数是特殊的成员函数,函数体可以在类体内,也可写在类体外;
5.构造函数被声明为公有函数,但它不能像其他成员函数那样被显式调用,它是在定义对象的同时被调用的。
析构函数有以下特点:
1.析构函数的名字必须与类名相同,但它前面必须加一个波浪号 ~ ;
2.析构函数没有参数,也没有返回值,而且不能被重载,因此在一个类中只能有一个析构函数;
3.当撤销对象时,编译系统会自动地调用析构函数。
c++类成员函数的重载,覆盖和隐藏有什么区别
1.成员函数被重载的特征:
(1)相同的范围(在同一个类中);
(2)函数名字相同;
(3)参数不同;
(4)virtual 关键字可有可无。
2.覆盖是指派生类函数覆盖基类函数,特征是:
(1)不同的范围(分别位于派生类与基类);
(2)函数名字相同;
(3)参数相同;
(4)基类函数必须有virtual 关键字。
3.“隐藏”是指派生类的函数屏蔽了与其同名的基类函数,规则如下:
(1)如果派生类的函数与基类的函数同名,但是参数不同。此时,不论有无virtual关键字,基类的函数将被隐藏(注意别与重载混淆)。
(2)如果派生类的函数与基类的函数同名,并且参数也相同,但是基类函数没有virtual 关键字。此时,基类的函数被隐藏(注意别与覆盖混淆)。
有关重载,应该是很好理解的(在同一个类中,函数名相同,函数的参数类型和个数不同),此处不予更多的说明,对于覆盖和隐藏(主要在基类和派生类中体现),借助下面这个例子来直观的说明:
#include《iostream》
using namespace std;
class People {
public:
// 隐藏:是指派生类的函数屏蔽基类函数
// 隐藏规则1:
// 1) 函数名相同 && 参数不同
// 2) virtual不影响
void getId_different_params() {cout 《《 “People::getId_different_params“ 《《 endl;}
virtual void getName_different_params() {cout 《《 “People::getName_different_params“ 《《 endl;}
// 隐藏规则2:
// 1) 函数名相同 && 参数相同
// 2) 无virtual
void getPhone_same_params() {cout 《《 “People::getPhone_same_params“ 《《 endl;}
// 覆盖规则:
// 1) 函数名相同 && 参数相同
// 2) 有virtual
virtual void getAddress_same_params() {cout 《《 “People::getAddress_same_params“ 《《 endl;}
};
class Children : public People {
public:
// 隐藏:是指派生类的函数屏蔽基类函数
// 隐藏规则1:
// 1) 函数名相同 && 参数不同
// 2) virtual不影响
void getId_different_params(int) {cout 《《 “Children::getId_different_params(int)“ 《《 endl;}
virtual void getName_different_params(int) {cout 《《 “Children::getName_different_params(int)“ 《《 endl;}
// 隐藏规则2:
// 1) 函数名相同 && 参数相同
// 2) 无virtual
void getPhone_same_params() {cout 《《 “Children::getPhone_same_params“ 《《 endl;}
// 覆盖规则:
// 1) 函数名相同 && 参数相同
// 2) 有virtual
virtual void getAddress_same_params() {cout 《《 “Children::getAddress_same_params“ 《《 endl;}
};
void main()
{
Children *c = new Children();
c-》getId_different_params(1);
c-》getName_different_params(1);
c-》getPhone_same_params();
c-》getAddress_same_params();
/*输出为:
Children::getId_different_params(int)
Children::getName_different_params(int)
Children::getPhone_same_params
Children::getAddress_same_params
*/
People *p = new Children();
p-》getId_different_params();
p-》getName_different_params();
p-》getPhone_same_params();
p-》getAddress_same_params();
/*输出为:
People::getId_different_params //由于子类中的函数只是隐藏了基类中的函数而没有覆盖,因为指针为基类指针,故调用基类函数
People::getName_different_params //由于子类中的函数只是隐藏了基类中的函数而没有覆盖,因为指针为基类指针,故调用基类函数
People::getPhone_same_params //由于子类中的函数只是隐藏了基类中的函数而没有覆盖,因为指针为基类指针,故调用基类函数
Children::getAddress_same_params // 由于子类中的函数覆盖了基类中的函数,虽然指针为基类指针,但是会调用子类函数
*/
}
const成员函数有什么特点
3.修饰函数返回值(包括成员函数)
4.修饰函数体
修饰函数返回值就是该函数返回的值在使用时不能改变,任何不被const修饰函数体的函数不能调用。
修饰成员函数体,表明该函数操作中不改变成员变量的值。100字限制
成员函数的特点
当子父类中出现了一模一样的方法时,会发生一个函数的特性:覆盖(复写,重写) override
覆盖使用注意事项:
1,子类覆盖父类时,必须要保证覆盖方法的权限要大于等于被覆盖的方法的权限。(private public 和空 default)
2,当覆盖方法有静态修饰时,静态只能覆盖静态,或者被静态覆盖。在写法上注意这个部分
。
什么是成员函数
就是一个类(class)里面所定义的函数
例如
class A
{
public:
void B();
private:
int C();
protected:
bool D(int i);
};
那么,B(),C(),D(int)都是A的成员函数

更多文章:
another time(another time和other time的区别)
2026年10月11日 05:00









