Última atualização:2026-10-12
struct em C++¶
Sobre o autor:¶
Conta oficial do WeChat:

1.struct em C¶
- Em C, struct é usado puramente como um tipo composto de dados; ou seja, na declaração da estrutura só é possível colocar membros de dados, não funções.
- Na declaração de uma estrutura em C não é possível usar modificadores de acesso do C++, como public, protected e private; já em C++ eles podem ser usados.
- Ao definir variáveis de estrutura em C, se for usada a definição abaixo, é obrigatório acrescentar struct.
- Estruturas em C não têm herança (o conceito não existe).
- Se o nome da estrutura for igual ao de uma função, o programa roda normalmente e a chamada funciona! Por exemplo: é possível definir void Base() {} sem conflito com struct Base.
Caso completo:
#include<stdio.h>
struct Base { // public
int v1;
// public: //error
int v2;
//private:
int v3;
//void print(){ // c中不能在结构体中嵌入函数
// printf("%s\n","hello world");
//}; //error!
};
void Base(){
printf("%s\n","I am Base func");
}
//struct Base base1; //ok
//Base base2; //error
int main() {
struct Base base;
base.v1=1;
//base.print();
printf("%d\n",base.v1);
Base();
return 0;
}
Saída final:
O código completo está em: struct_func.c
2.struct em C++¶
Comparando com C:
- Em estruturas C++ é possível definir não apenas dados, mas também funções.
- Em estruturas C++ podem ser usados modificadores de acesso, como public, protected e private.
- No uso de estruturas C++, pode-se usar diretamente sem struct.
- Herança em C++
- Se o nome da estrutura for igual ao de uma função, o programa roda normalmente e a chamada funciona! Mas, ao definir variáveis da estrutura, só é possível usar a forma com struct!
Por exemplo:
Caso 1: sem usar typedef para definir um alias da estrutura
Antes de adicionar a função de mesmo nome:
Depois de adicionar a função de mesmo nome:
Caso 2: usando typedef para definir um alias da estrutura
typedef struct Base1 {
int v1;
int v3;
public: //显示声明public
int v2;
void print(){
printf("%s\n","hello world");
};
}B;
//void B() {} //error! 符号 "B" 已经被定义为一个 "struct Base1" 的别名
Os três primeiros casos
#include<iostream>
#include<stdio.h>
struct Base {
int v1;
// private: //error!
int v3;
public: //显示声明public
int v2;
void print(){
printf("%s\n","hello world");
};
};
int main() {
struct Base base1; //ok
Base base2; //ok
Base base;
base.v1=1;
base.v3=2;
base.print();
printf("%d\n",base.v1);
printf("%d\n",base.v3);
return 0;
}
O código completo está em: struct_func.cpp
Caso de herança
#include<iostream>
#include<stdio.h>
struct Base {
int v1;
// private: //error!
int v3;
public: //显示声明public
int v2;
virtual void print(){
printf("%s\n","Base");
};
};
struct Derived:Base {
public:
int v2;
void print(){
printf("%s\n","Derived");
};
};
int main() {
Base *b=new Derived();
b->print();
return 0;
}
O código completo está em: ext_struct_func.cpp
Função de mesmo nome
#include<iostream>
#include<stdio.h>
struct Base {
int v1;
// private: //error!
int v3;
public: //显示声明public
int v2;
void print(){
printf("%s\n","hello world");
};
};
typedef struct Base1 {
int v1;
// private: //error!
int v3;
public: //显示声明public
int v2;
void print(){
printf("%s\n","hello world");
};
}B;
void Base(){
printf("%s\n","I am Base func");
}
//void B() {} //error! 符号 "B" 已经被定义为一个 "struct Base1" 的别名
int main() {
struct Base base; //ok
//Base base1; // error!
base.v1=1;
base.v3=2;
base.print();
printf("%d\n",base.v1);
printf("%d\n",base.v3);
Base();
return 0;
}
3.Resumo¶
Diferenças entre struct em C e C++¶
| C | C++ |
|---|---|
| Não é possível colocar funções na declaração da estrutura | É possível colocar funções na declaração da estrutura |
| Na declaração de estrutura em C não é possível usar modificadores de acesso do C++. | public, protected e private podem ser usados em C++. |
| Ao definir variáveis de estrutura em C, se for usada a definição abaixo, é obrigatório acrescentar struct. | Pode-se omitir struct |
| Estruturas não têm herança (o conceito não existe). | Herança é possível |
| Se o nome da estrutura for igual ao de uma função, o programa roda normalmente e a chamada funciona! | Se o nome da estrutura for igual ao de uma função, para usar a estrutura só é possível usar a definição com struct! |
Tópicos relacionados¶
- Funções virtuais puras e classes abstratas em C++ | C++那些事
- Asserções com assert em C++ | C++那些事
- Bit fields em C++ | C++那些事
- Implementando polimorfismo de C++ em linguagem C | C++那些事
- Constantes e modificadores com const em C++ | C++那些事
- A família completa do const em C++ | C++那些事
- O operador de desreferência * em C++ | C++那些事
- Inicialização e atribuição em C++ | C++那些事
- Formas de retornar múltiplos valores em C++ | C++那些事
- A palavra-chave mutable em C++ | C++那些事