为了消除一些混淆和方便理解,这里有一些要点!
在结构体中,你可以使用封装和可见性运算符(使其成为私有或公共)!就像你在类中所做的那样!
因此,有些人说或者你可能会在网上找到的说法:结构体的一个区别是没有可见性运算符和隐藏数据的能力,是错误的!
你可以像在类中一样拥有方法!
运行下面的代码!你可以检查它是否编译良好!并且所有都正常运行!整个结构体的工作方式就像类一样!
主要的区别只在于可见性模式的默认设置!
结构体是公共的!类默认为私有!
#include<iostream>
#include<string>
using namespace std;
int main(int argv, char * argc[]) {
struct {
private:
bool _iamSuperPrivate = true;
void _sayHallo() {
cout << "Hallo mein Bruder!" << endl;
}
public:
string helloAddress = "";
void sayHellow() {
cout << "Hellow!" << endl;
if (this->helloAddress != "") {
cout << this->helloAddress << endl;
}
this->_sayHallo();
}
bool isSuperPrivateWorking() {
return this->_iamSuperPrivate;
}
} testStruct;
testStruct.helloAddress = "my Friend!";
testStruct.sayHellow();
if (testStruct.isSuperPrivateWorking()) {
cout << "Super private is working all well!" << endl;
} else {
cout << "Super private not working LOL !!!" << endl;
}
return 0;
}
在内存中它们是相同的!
我没有亲自检查过!但有人说,如果你做同样的事情!编译后的汇编代码将在结构体和类之间相同!(待验证!)
取任何一个类,将名称更改为typedef struct!您会发现代码仍然可以正常工作!
class Client {
}
Client client(...);
=>
typedef struct Client {
....
} Client;
Client client(...);
如果你这样做,所有东西都会一样工作!至少我知道 gcc 中是这样的!
你可以在你的平台上测试!
class
和struct
类型的区别在于,class
的默认访问控制是private
,而struct
的默认访问控制是public
。在创建类型之外使用这些关键字可能略有不同...但你似乎在将很多精力投入到struct
和class
这两个词在类型中的区别上。它可以用于特定项目的文档,但这是项目特定的。 - Yakk - Adam Nevraumontint age(const Person& person)
。并不是所有的东西都必须是具有方法的对象。 - molbdnilo